2011-08-30 98 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); 

我想能夠比較兩個boost :: function與相同的簽名。 我應該修改哪些代碼才能編譯這些代碼?比較兩個boost :: function

+1

參見[爲什麼的std ::功能不是平等的可比性?](http://stackoverflow.com/q/3629835/20984) –

回答

14

你不能。閱讀boost function FAQ的第一個條目:

  1. 我爲什麼不能比擬的boost ::功能與運營商==或 操作對象!=?

的boost ::函數對象之間的比較不能實施 「好」,因此將無法實施。 ...

+0

爲什麼這個不能很好地執行? – Guillaume07

+3

@ Guillaume07:FAQ條目的其餘部分我發佈了一個鏈接來解釋這一點。我認爲更好的複製粘貼整個條目到答案 –

-1

您是否正在比較簽名或函數等式(這兩個函子指向相同的底層內存地址)?如果是後者,你可以使用boost/function_equal.hpp提供的接口:

Boost Function Equal

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

錯誤的答案,'function_equal'只用於允許函數* wrappers *('boost :: function')與函數* objects *(函數或函數指針)(參見[比較Boost.Function函數對象](http://www.boost.org/doc/libs/1_47_0/doc/html/function/tutorial.html#id1362038))。兩個函數包裝的比較是不可能的。 (我承認文檔不太清楚。) –

+0

這就是我想要的。 – 2016-05-24 12:19:04