比较Boost.Bind返回的对象

Comparing objects returned by Boost.Bind?

本文关键字:对象 返回 Bind Boost 比较      更新时间:2023-10-16

可能吗?指令bool b = (boost::bind(func, 1) == boost::bind(func, 1))不能编译,因为它"不能从'boost::_bi::bind_t'转换为'bool'"。(func的签名为void func(int))

Bind重载关系操作符以返回嵌套绑定表达式。因此,在您的代码中,boost::bind(func, 1) == boost::bind(func, 1)返回一个空值(因为绑定表达式中没有占位符)函函数,该函函数在调用时返回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_t似乎确实提供了一个function_equal方法:http://www.boost.org/doc/libs/1_47_0/boost/bind/bind.hpp