最初に、新しい関数オブジェクト、contains_t の定義が来ます。ヘルパー クラス std::unary_function (正しい typedef の作成を容易にすることを目的とした C++ 標準ライブラリの一部) から継承し、引数と結果の型を自動的に定義することもできますが、明確にするために、必要な 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();
}
};
ありがとうございました