比较Boost.Bind返回的对象?

时间:2011-07-30 19:45:43

标签: c++ boost-bind

有可能吗?指令bool b = (boost::bind(func, 1) == boost::bind(func, 1))无法编译,因为它“无法从'boost :: _ bi :: bind_t'转换为'bool'”。 (func的签名是void func(int)。)

2 个答案:

答案 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