比较两个boost::function函数对象

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。 该如何修改代码才能让其可编译?

2个回答

14

不行。请阅读boost function FAQ的第一个条目:

  1. 为什么我不能使用operator==或operator!=比较boost::function对象?

boost::function对象之间的比较无法实现得很好,因此将不会实现...


为什么这个无法被很好地实现? - Guillaume Paris
3
@Guillaume07:我贴的链接中的FAQ条目的其余部分解释了这一点。我认为最好不要将整个条目复制粘贴到答案中。 - Armen Tsirunyan

-1

你是想比较签名,还是函数对象的相等性(即两个函数对象指向相同的底层内存地址)?如果是后者,你可以使用 boost/function_equal.hpp 提供的接口:

Boost Function Equal

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

3
错误答案,“function_equal”仅适用于允许比较函数包装器boost::function)与函数对象(functor或函数指针)(请参见Comparing Boost.Function function objects)。无法比较两个函数包装器。(我承认文档在这方面并不是很清楚。) - Luc Touraille
这就是我想要的。 - user3703887

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接