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().否则,该函数始终返回空指针.
那么,如果存在,有什么方法可以实现它?
这是一个(非常糟糕)的想法:
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)
它不漂亮,但你的情况也不是.