【发布时间】: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类型的参数调用的接口,并应用采用int或double或任何其他long的底层函数可以转换为。如果你不需要那种转换,你就不需要std::function。
标签: c++ pointers member-function-pointers