2013-08-16 40 views
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(); 

我做错了什么?

感谢

+0

[这](http://stackoverflow.com/questions/18266582/ how-create-a-function-pointer-to-point-a-member-function/18266621#18266621)可能有帮助 – aaronman

+1

_What_error?告诉我们你看到了什么。 –

+0

明显调用的括号之前的表达式必须有(指针)功能类型 – Rouki

回答

9

The error in GCC 4.8.1是不言自明:

error: must use ‘.’ or ‘->’ to call pointer-to-member function in ‘action (...)’, e.g. ‘(... ->* action) (...)’

basePointer->*action(); 

所以,只要做到这一点:

(basePointer->*action)();