1

出来ますか?bool b = (boost::bind(func, 1) == boost::bind(func, 1))「'boost:: _ bi ::bind_t'から'bool'に変換できない」ため、命令はコンパイルされません。(の署名はfuncですvoid func(int)。)

4

2 に答える 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 に答える