【问题标题】:compare two boost::function比较两个 boost::function
【发布时间】:2023-04-09 18:09:01
【问题描述】:
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。 我应该修改什么以使此代码可编译?

【问题讨论】:

标签: c++ boost


【解决方案1】:

你不能。阅读boost function FAQ的第一个条目:

  1. 为什么我不能将 boost::function 对象与 operator== 或 运算符!=?

无法实现 boost::function 对象之间的比较 “好”,因此不会实施。 ...

【讨论】:

  • 为什么不能很好的实现?
  • @Guillaume07:FAQ 条目的其余部分我发布了一个链接来解释这一点。我认为最好将整个条目复制粘贴到答案中
【解决方案2】:

您是否希望比较签名或仿函数相等性(两个仿函数指向相同的底层内存地址)?如果是后者,可以使用boost/function_equal.hpp提供的接口:

Boost Function Equal

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

【讨论】:

  • 错误答案,function_equal 仅用于比较函数 wrappers (boost::function) 与函数 objects(函子或函数指针)(参见Comparing Boost.Function function objects)。无法比较两个函数包装器。 (我承认文档对此不是很清楚。)
  • 这就是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 2016-10-24
  • 2013-05-03
  • 2011-06-11
  • 1970-01-01
相关资源
最近更新 更多