2011-08-30 13 views
7
void ff(int){} 

void Unscribe(const boost::function<void(int)>& f) 
{ 
    std::map<int, boost::function<void(int)> > map; 

    map[0] = ff; 

    if(map[0] == f) 
    { 

    } 
} 

Unscribe(ff); 

2つのboost :: functionを同じシグネチャと比較したいと考えています。 このコードをコンパイルできるように変更する必要はありますか?2つのboost :: functionを比較してください。

+1

参照[なぜのstd ::機能しませ平等が同等である?](http://stackoverflow.com/q/3629835:その後者の場合は、boost/function_equal.hppが提供するインタフェースを使用することができます/ 20984) –

答えて

14

できません。 boost function FAQ初エントリー読む:

  1. をなぜ後押し比較することはできません::機能は、オペレータ==または 演算子とオブジェクト=!?

boost :: functionsオブジェクト間の比較は実装できません "well"したがって実装されません。 ...

+0

これはなぜうまく実装できないのですか? – Guillaume07

+3

@ Guillaume07:FAQの残りの部分は私がそれを説明するリンクを投稿しました。私は、回答全体にコピー貼り付けの方が良いと思った。 –

-1

シグネチャを比較するか、ファンクタの平等性(2つのファンクタが同じ基本メモリアドレスを指している)を比較しようとしていますか?

Boost Function Equal

template<typename F, typename G> bool function_equal(const F& f, const G& g); 
+2

誤った答えである 'function_equal'は、関数*ラッパー*(' boost :: function')と関数*オブジェクト*(ファンクタまたは関数ポインタ)([Boost.Function関数オブジェクトの比較](http://www.boost.org/doc/libs/1_47_0/doc/html/function/tutorial.html#id1362038)を参照してください)。 2つの関数ラッパーの比較はできません。 (私はドキュメントがそれについて非常に明確ではないことを認めます) –

+0

これは私が欲しいものです。 –