2011-08-30 73 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