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。 该如何修改代码才能让其可编译?
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 FAQ的第一个条目:
- 为什么我不能使用operator==或operator!=比较boost::function对象?
boost::function对象之间的比较无法实现得很好,因此将不会实现...
你是想比较签名,还是函数对象的相等性(即两个函数对象指向相同的底层内存地址)?如果是后者,你可以使用 boost/function_equal.hpp
提供的接口:
template<typename F, typename G> bool function_equal(const F& f, const G& g);
boost::function
)与函数对象(functor或函数指针)(请参见Comparing Boost.Function function objects)。无法比较两个函数包装器。(我承认文档在这方面并不是很清楚。) - Luc Touraille