2011-07-30 4 views
1

可能でしょうか?命令bool b = (boost::bind(func, 1) == boost::bind(func, 1))は、 "boost :: _ bi :: bind_t 'から" bool "に変換できないため、コンパイルされません。 (。funcの署名がvoid func(int)ある)Boost.Bindから返されたオブジェクトの比較?

+0

なぜ関数ポインタなどを比較したいですか? –

+0

...私がする必要があるので...私はそれを "いいえ、それは不可能"として取るべきですか? –

+0

いいえ、わかりませんが、boost :: bindの戻り値の型にoperator ==が定義されているとは思わない –

答えて

1

これは「oficiallyサポート機能」であるかどうかを知りませんがfunction_equal方法を提供することbind_tようです:Boost.Bindは関係演算子は、ネストされた返すようにオーバーロードhttp://www.boost.org/doc/libs/1_47_0/boost/bind/bind.hpp

+0

ねえ、これは非常に有望なようです、ありがとうございます。私は明日これをテストします。私は今、とても疲れています。 :) –

+0

ありがとう、パブロ、それは動作します。代わりに、 'boost :: bind(func、1).compare(boost :: bind(func、1))'というcompareメンバ関数を使うこともできます。 –

3

をバインド式。したがって、あなたのコードでは、boost::bind(func, 1) == boost::bind(func, 1)はヌルナリを返します(バインド式にプレースホルダがないため)。ファンクタは、呼び出されると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です。

関連する問題