我想向函数传递一个类方法的引用。
例如:
#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()不是静态的)?
答案 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
慢。