比较 Boost.Bind 返回的对象?
是否可以?指令 bool b = (boost::bind(func, 1) == boost::bind(func, 1)) 无法编译,因为它“无法从 'boost::_bi:: 转换”将“bind_t”绑定到“bool””。 (func
的签名是 void func(int)
。)
Is it possible? The instruction bool b = (boost::bind(func, 1) == boost::bind(func, 1))
does not compile because it "cannot convert from 'boost::_bi::bind_t' to 'bool'". (The signature of func
is void func(int)
.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Boost.Bind 重载关系运算符以返回嵌套的绑定表达式。因此,在您的代码中
boost::bind(func, 1) == boost::bind(func, 1)
返回一个空值(因为绑定表达式中没有占位符)函子,当调用时,返回func(1) == func(1)
。对于谓词来说,这是一个方便的功能,除其他用途外:此外,返回的对象不能转换为 bool,这就是它无法编译的原因(忽略它不执行以下操作的问题)你想要)。
您想要做的事情不是 Boost.Bind 接口的一部分。 Tt 不会是一个非常有用的功能,并且在(非常)一般情况下是不可判定。
Boost.Bind overloads the relational operators to return nested bind expressions. Thus in your code
boost::bind(func, 1) == boost::bind(func, 1)
returns a nullary (since there is no placeholders in your bind expressions) functor that, when called, returnsfunc(1) == func(1)
. This is a convenient feature for predicates, amongst other uses:In addition, the returned object is not convertible to
bool
and this is why it won't compile (disregarding the issue that it doesn't do what you want).What you want to do is not part of the Boost.Bind interface. Tt would not be a very useful feature and in the (very) general case is undecidable.
不知道这是否是“官方支持的功能”,但bind_t似乎确实提供了一个
function_equal
方法:http://www.boost.org/doc/libs/1_47_0/boost/bind/bind.hppDon't know if this is "oficially supported functionality" but bind_t does seem to provide a
function_equal
method: http://www.boost.org/doc/libs/1_47_0/boost/bind/bind.hpp