有可能吗?指令bool b = (boost::bind(func, 1) == boost::bind(func, 1))
无法编译,因为它“无法从'boost :: _ bi :: bind_t'转换为'bool'”。 (func
的签名是void func(int)
。)
答案 0 :(得分:3)
Boost.Bind重载关系运算符以返回嵌套的绑定表达式。因此,在您的代码boost::bind(func, 1) == boost::bind(func, 1)
中返回一个nullary(因为绑定表达式中没有占位符)仿函数,在调用时返回func(1) == func(1)
。对于谓词以及其他用途,这是一个方便的功能:
typeded std::pair<T, U> pair_type;
// find pair where the first element is equal to 3
std::find_if(begin, end, boost::bind(&pair_type::first, _1) == 3);
此外,返回的对象不能转换为bool
,这就是为什么它不会编译(忽略它不能做你想做的事情)。
您想要做的不是Boost.Bind界面的一部分。 Tt不是一个非常有用的功能,在(非常)一般情况下是undecidable。
答案 1 :(得分:1)
不知道这是否是“官方支持的功能”,但是bundt确实提供了function_equal
方法:http://www.boost.org/doc/libs/1_47_0/boost/bind/bind.hpp