将类成员函数转换为std :: function的模板化函数

时间:2015-01-09 19:06:09

标签: c++ c++11 lambda function-pointers

我的代码中使用此签名调用了很多方法:

void foo (std::function<void(int)> func, int a) {
  func(a);
}

我可以很容易地将这样的函数传递给方法:

static void bar(int a);
foo(bar, 42)

另外,如果我有一个类实例,我可以将函数指针传递给我的实例,就像这个丑陋的片段一样:

class Baz { 
  bar(int a) {...}
  callFoo() {
     foo(std::bind(&Baz::bar, this, _1);
  }
}

但是,在我的应用程序中,我经常需要在我持有指向具有有效成员函数的对象的指针的地方调用foo,该成员函数可以作为foo的参数。我真的不想给每个碰巧拿着有效指针的类提供一个调用“foo”的方法。事实上,我希望那些课程甚至不了解foo

我想要一个看起来像这样的方法:

template<class T>
static void callFooSugar(T* ClassPointer, [What goes here?] ClassMethod);

所以我可以这样做:

Baz MyBaz;
callFooSugar(&MyBaz, bar);

有没有办法在不诉诸宏的情况下编写callFooSugar?我正在使用C ++ 11进行编译。

0 个答案:

没有答案