首先是我们的新函数对象contains_t的定义。它 可以继承自助手类std :: unary_function(部分 C ++标准库的目的是为了便于创建 正确的typedef)并定义了参数和结果类型 自动,但为了清楚,所需的typedef是 明确提供。 参数类型已从const更改 提高::任何和放大器;提升::任何,以避免潜力 引用引用,这是非法的。实现只是 和以前一样,只有它放在函数调用操作符中。
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();
}
};
谢谢
答案 0 :(得分:1)
由于boost :: any可以存储任何内容,因此它也可以存储引用。因此,如果你有一个boost :: any的引用,你可能会意外地在内部引用一个引用。
即。 boost :: any可以表示任何类型T.令T是U类型的引用,即T = U&amp ;.因此,对类型T的引用会创建对类型U的引用的引用,这在C ++ 03中是不允许的(C ++ 11将允许它)。