指向函数的指针有和指向类成员函数的指针的有什么不同?
int f(char a, float b);
如果它是普通函数,则它的类型是 int (*)(char, float);
如果它是非静态成员函数,则它的类型是 int(ClassName::*)(char, float);
如果它是静态成员函数,则它的类型是和普通函数一样。
如何把一个类的成员函数传递给event handler, 线程启动函数等?
类的成员函数必须和一个类的实例结合起来才有意义。可以写一个函数来包装类的成员函数。
class X { public: void f(); static void sf(); }; X x*; void wapper_f() { x->f(); } int main() { signal(SIGINT, wapper_f); // ok signal(SIGINT, X::sf); // ok }
如何更方便地去创建一个执行类成员变量的类型?
用typedef.
class Fred { public: int f(char x); int g(char x); }; typedef int (Fred::*FredFn)(char x); void f() { FredFn fn = &Fred::f; } void f2(FredFn fn) {... } FredFn f3() {...}
如何更方便的调用通过指针指向的类成员函数?
#define CALL_MEMBER_FN(object, prtToMember) ((object).*(prtToMember)) void userCode(Fred &fred, FredFn fn) { int ans = CALL_MEMBER_FN(fred, fn)(3); }
原文参考:
https://isocpp.org/wiki/faq/pointers-to-members#fnptr-vs-memfnptr-types
时间: 2024-10-29 19:07:13