我想获取C ++类当前实例的成员函数的函数指针。然后我想将该函数指针添加到全局注册表。
我无法在单独的位置创建实例并在那里添加函数指针。它应该在这个实例中添加。
这就是我所做的。但它没有按预期工作。我在这里做错了吗?
实施例
在MyClass.h中
class MyClass
{
public:
MyClass();
~MyClass();
typedef int (MyClass::*fpointer)(int);
int foo(int val);
private:
void addFuncPointer();
}
在MyClass.cpp中
MyClass::MyClass()
{
addFuncPointer();
}
int MyClass::foo(int val)
{
// Function Definition
}
void MyClass::addFuncPointer()
{
fpointer funct = &MyClass::foo;
//I am adding this function pointer to a global registry.
GlobalRegistry.add(globalindex, funct);
globalindex++;
}
在Main.cpp
int main()
{
MyClass* cls = new MyClass();
GlobalRegistry.getFunctionPointer(validindex)->call();
return 0;
}
答案 0 :(得分:1)
您遇到的问题是由于类的所有对象共享其成员函数的相同代码。因此,如果要为特定实例调用成员函数,则需要同时保存指向实例的指针和指向成员函数的指针。
从C ++ 11开始,这可以包装到一个函数对象中:
struct Foo {
void func() { /* ... */ }
} foo;
auto mem_func = std::bind(&Foo::func, &foo);
mem_func();