指向函数成员的指针

Pointers to function members

本文关键字:指针 成员 函数      更新时间:2023-10-16

给定以下简单代码:

namespace exercise {
class A {
public:
    virtual void a() = 0;
    virtual void b() = 0;
    virtual void c() = 0;
};
class B : public A {
    void a() { std::cout << "a function @ B class"; }
    void b() { std::cout << "b function @ B class"; }
    void c() { std::cout << "c function @ B class"; }
};
class C : public A {
    void a() { std::cout << "a function @ C class"; }
    void b() { std::cout << "b function @ C class"; }
    void c() { std::cout << "c function @ C class"; }
};
using Pstd_mem = void(A::*)();
void foo(A* basePointer, Pstd_mem action) {
    basePointer->*action();
}
}
int main(void) {
using namespace exercise;
A* b = new B();
A* c = new C();
foo(b, &A::b);
}

我只是试图使用函数foo通过指向成员函数的指针调用函数B(),但编译器在以下行给了我一个错误:

basePointer->*action();

我做错了什么?

感谢

GCC 4.8.1中的错误不言自明:

错误:必须使用"'或'->'调用指向"action(…)"中成员函数的指针,例如"(…->*action)(…)'

basePointer->*action();

所以,简单地做:

(basePointer->*action)();