从现代C++ 11函数转换为原始函数指针

Bia*_*sta -1 c++ function-pointers c++11

假设我有以下功能界面:

void giveme(void (*p)());
Run Code Online (Sandbox Code Playgroud)

该函数只接受指向函数的指针,该函数没有返回类型和参数.

我想知道是否存在一种方式(不改变界面)传递类方法作为该函数的参数.

我将尝试用一个例子更好地解释.我有一节课,比如:

class Foo {
 public:
  template<typename T>
  void bar();
};
Run Code Online (Sandbox Code Playgroud)

我想传递bar<T>(该类的可寻址实例)作为函数的参数giveme.

我想用方法绑定方法,并获取函数目标.

就像是:

int main(int argc, char *argv[]) {
  Foo foo;
  std::function<void()> f = std::bind(&Foo::bar<int>, &foo);

  giveme(f.target<void()>());

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

它编译,但显然不起作用,因为,从这里:

TargetType应匹配目标类型,以便typeid(TargetType)==target_type().否则,该函数始终返回空指针.

那么,如果存在,有什么方法可以实现它?

Ker*_* SB 5

这是一个(非常糟糕)的想法:

Foo * foo_ptr;  // maybe thread_local

void foo_call()
{
    foo_ptr->bar<int>();
}

int main()
{
    Foo foo;
    foo_ptr = &foo;
    give_me(&foo_call);
}
Run Code Online (Sandbox Code Playgroud)

它不漂亮,但你的情况也不是.