出来ますか?bool b = (boost::bind(func, 1) == boost::bind(func, 1))
「'boost:: _ bi ::bind_t'から'bool'に変換できない」ため、命令はコンパイルされません。(の署名はfunc
ですvoid func(int)
。)
1069 次
2 に答える
3
Boost.Bind は関係演算子をオーバーロードして、ネストされたバインド式を返します。したがって、コードでboost::bind(func, 1) == boost::bind(func, 1)
は nullary を返します (バインド式にプレースホルダーがないため) ファンクターは、呼び出されたときに を返しますfunc(1) == func(1)
。これは、述語の便利な機能であり、他の用途の中でも特に便利です。
typeded std::pair<T, U> pair_type;
// find pair where the first element is equal to 3
std::find_if(begin, end, boost::bind(&pair_type::first, _1) == 3);
さらに、返されたオブジェクトは変換できずbool
、これがコンパイルされない理由です (必要なことが行われないという問題を無視します)。
やりたいことは、Boost.Bind インターフェイスの一部ではありません。Tt はあまり便利な機能ではなく、(非常に) 一般的なケースではundecidableです。
于 2011-07-30T21:02:18.003 に答える
1
これが「公式にサポートされている機能」であるかどうかはわかりませんが、bind_t はfunction_equal
メソッドを提供しているようです: http://www.boost.org/doc/libs/1_47_0/boost/bind/bind.hpp
于 2011-07-30T20:36:22.477 に答える