如何从另一个成员函数调用成员函数指针?

Posted

技术标签:

【中文标题】如何从另一个成员函数调用成员函数指针?【英文标题】:How can i call a member function pointer from another member function? 【发布时间】:2021-06-02 10:25:57 【问题描述】:

我有一个类,它有一个存储成员函数指针的数据成员。指针在不同的时间指向不同的成员函数。我想从另一个成员函数调用这个函数指针。我该怎么做?

class A 

  void (A::*fnPointer)() = nullptr;

  void callerMemberFunction()
    fnPointer = &A::someMemberFunction;  // Store the function
    (*fnPointer)(); // I would like to call the function. How can i do?
  

  void someMemberFunction() ... 



   

【问题讨论】:

(*this.*fnPointer)(); 我知道这并不能回答问题,因为您专门询问函数指针,但更现代的方法是使用 std::function<void()> fn; 作为成员变量,然后为其分配一个 lambda :fn = [this]()someMemberFunction();; 并简单地使用fn() 调用它。 std::function 是 STL 的一部分,可以使用 #include <functional> 包含在内。 @DavidWright -- 在许多情况下,std::function 增加了开销而没有相应的好处。 std::function 旨在管理阻抗失配,例如,提供可以使用 long 类型的参数调用的接口,并应用采用 intdouble 或任何其他 long 的底层函数可以转换为。如果你不需要那种转换,你就不需要std::function 【参考方案1】:

你需要指定在哪个对象上调用函数:

(this->*fnPointer)();

【讨论】:

这么奇怪的语法!

以上是关于如何从另一个成员函数调用成员函数指针?的主要内容,如果未能解决你的问题,请参考以下文章

指向模板类成员函数的函数指针

如何从静态成员函数调用指向成员函数的指针?

如何通过成员函数指针调用成员函数? [复制]

c++类的成员函数指针如何转为普通指针

C++|详解类成员指针:数据成员指针和成员函数指针及应用场合

如何通过保存在容器中的成员指针函数调用?