引用类方法

时间:2015-07-02 15:22:34

标签: function c++11 reference arguments

我想向函数传递一个类方法的引用。

例如:

#include <functional>

struct Foo
{
  int f(const int& val) const
  {
    return val+2;
  }
};

int caller(const std::function<int(const int&)>& f)
{
  return f(1);
}

int main()
{
  caller([](const int& val){return val+2;}); // OK
  Foo foo;
  caller(foo.f); // WRONG
  return 0;
}

如何修复调用者()的第二次调用(注意:Foo:f()不是静态的)?

1 个答案:

答案 0 :(得分:0)

在您的情况下,函数f不会使用Foo的任何成员,因此可以声明static

    static int f(const int& val)

并传递给:

    caller(&Foo::f);

但是假设f无法声明为static,而您希望传递&#34;引用&#34;到特定对象的成员函数。

在这种情况下你可以使用lambda:

    Foo foo;
    caller(
       [&foo](const int& val){
          return foo.f(val);
       }
    );

foo对象在方括号中捕获(在本例中为引用),以便您可以在该特定对象上调用f成员函数。

虽然这不是你问题的一部分,但我应该补充说,通过const引用传递int并不是真的有用,因为你不会以这种方式获得任何性能提升。实际上,您的代码运行速度比通过值传递int慢。