当前实例

时间:2017-02-23 11:02:15

标签: c++ pointers

我想获取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;
}

1 个答案:

答案 0 :(得分:1)

您遇到的问题是由于类的所有对象共享其成员函数的相同代码。因此,如果要为特定实例调用成员函数,则需要同时保存指向实例的指针和指向成员函数的指针。

从C ++ 11开始,这可以包装到一个函数对象中:

struct Foo {
  void func() { /* ... */ }
} foo;
auto mem_func = std::bind(&Foo::func, &foo);
mem_func();