【问题标题】:How to compare function objects [duplicate]如何比较函数对象[重复]
【发布时间】:2013-09-15 13:53:05
【问题描述】:

如果两个函数对象持有相同的函数引用,如何比较?

struct A {
    void b(){}
}
int main() {
    A a;
    auto f1 = std::bind(&A::b, a);
    auto f2 = std::bind(&A::b, a);

    f1 == f2 // ???
}

【问题讨论】:

  • 你从中得到了什么错误?
  • 您可以在一定程度上比较std::function 对象(通过function::target)。但是,这不适用于std::bind-表达式,因为它们的类型是实现定义的。

标签: c++ c++11


【解决方案1】:

std::bind 的结果保证只能被调用并且成员类型为result_type。没有符合标准的方法来比较绑定函数。

返回值

一个未指定类型 T 的函数对象,对于它 std::is_bind_expression::value == true,可以存储在 标准::函数。如果 f 和所有 args 都是可移动的,则该对象是可移动的, 并且是可复制的。该类型定义了以下成员:

来自http://en.cppreference.com/w/cpp/utility/functional/bind

【讨论】:

    猜你喜欢
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 2014-07-17
    • 2016-11-10
    • 2012-10-20
    • 2023-03-15
    相关资源
    最近更新 更多