首先是我们的新函数对象 contains_t 的定义。它可能继承自辅助类 std::unary_function(C++ 标准库的一部分,旨在促进正确的 typedef 的创建)并自动定义参数和结果类型,但为了清楚起见,所需的 typedef 是明确提供。参数类型已从 const boost::any& 更改为 boost::any,以避免潜在的引用到引用,这是非法的。实现和之前一样,只是这里放在了函数调用操作符中。
template <typename T> struct contains_t {
typedef boost::any argument_type;
typedef bool result_type;
bool operator()(boost::any a) const {
return typeid(T)==a.type();
}
};
为什么以下实现有可能接收引用到引用?
template <typename T> struct contains_t {
typedef boost::any argument_type;
typedef bool result_type;
bool operator()(const boost::any& a) const {
return typeid(T)==a.type();
}
};
谢谢