c++ - 类的非静态成员函数的函数指针

标签 c++ static function-pointers functor pointer-to-member

我想在类中定义一个成员函数并使用它的指针。我知道我可以使用静态成员函数,但问题是我只能访问类的静态成员。除了静态成员函数之外,还有其他方法可以获取函数指针吗?


更具体地说:我正在使用一个库,它获取一个函数指针作为其输入。我想编写一个成员函数并将其函数指针分配给该外部库。我应该创建类的对象还是使用 this 指针来执行此操作?

最佳答案

可以得到方法的指针,但是必须用对象调用

typedef void (T::*MethodPtr) ();
MethodPtr method = &T::MethodA;
T *obj = new T();
obj->*method();

如果您需要非对象指针并且想使用对象,那么您必须将对象实例存储在某处,但您只能使用一个对象(单例)。

class T {
  static T *instance;
public:
  T::T() {
    instance = this;
  }
  static void func() {
    instance->doStuff();
  }
  void doStuff() {}
};

如果库支持函数指针的用户数据,那么你可能有多个实例

class T {
public:
  static void func(void *instance) {
    ((T*)instance)->doStuff();
  }
  void doStuff() {}
};

关于c++ - 类的非静态成员函数的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14315346/

相关文章:

c++ - 使用 std::accumulate 计算均值失败

c++ - 使用 ARC 在 C 函数中取消引用 self,引用作为 intptr_t 传递

java - 静态常量在匿名类中有何用处?

c - 函数指针使用的地址

c++ - Visual Studio 2010 : Using define macro to specify output executable

c++ - 根据提案 n4015 实现 expected<E, T>

c++ - 线程访问静态映射时出现段错误

ios - 如何检测静态 TableView 中的单元格并使用 segue

c - 代码的解释是什么?

c++ - 类成员函数指针