【发布时间】:2020-12-11 02:29:25
【问题描述】:
假设我有一堂课:
class A {
public:
A();
void myFunc();
};
然后在程序的不同点创建一个类 A 的实例,并尝试获取指向 myFunc() 的函数指针:
A* a = new A;
//ATTEMPTS AT RETRIVING FUNCTION POINTER FOR A::MYFUNC
std::function<void()> fnptr = a->myFunc;
std::function<void()> fnptr(std::bind(A::myFunc, &a);
但是这两种尝试都会出现错误“调用没有对象参数的非静态成员函数”
也许这两种尝试都完全不合时宜,但实际上我试图在a 的特定实例中获取指向myFunc() 函数的函数指针。任何有关如何做到这一点的帮助表示赞赏:)
【问题讨论】:
-
在
std::bind(A::myFunc, &aa已经是一个指针。不需要另一个级别的间接。看看Lambda Expressions 作为bind的更有效替代方案 -
std::function<void()> fnptr = [a]{ a->myFunc(); };
标签: c++ function-pointers member-function-pointers