0

给出以下简单代码:

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();

我究竟做错了什么?

谢谢

4

1 回答 1

9

GCC 4.8.1 中的错误是不言自明的:

错误:必须使用'. ' 或 '-> ' 在 'action (...)' 中调用指向成员的函数,例如 '(... ->* action) (...)'</p>

basePointer->*action();

所以,只需这样做:

(basePointer->*action)();
于 2013-08-16T06:26:06.870 回答