2016-08-26 6 views
1

Мой базовый класс содержит указатель на функцию-член. Как я могу назвать эту функцию-член из производного класса? Я хочу вызвать эту функцию указателем. Вот мой код до сих пор:Метод базового вызова из унаследованного указателя функции

#include <iostream> 

class Base 
{ 
public: 
    Base()   {FuncPtr = &Base::Func1;} 
    Base(int num) { 
     if(num==1) 
      FuncPtr = &Base::Func1; 
     else if(num==2) 
      FuncPtr = &Base::Func2; 
     else 
      FuncPtr = NULL; 
    } 
protected: 
    void (Base::*FuncPtr)(float ,float); 

    void Func1(float x,float y) { std::cout << "Func1 called\n";} 
    void Func2(float x,float y) { std::cout << "Func2 called\n";} 
}; 

class Derived : private Base 
{ 
public: 
    Derived()      {} 
    Derived(int num) : Base(num) {} 

    void callBaseFunc1  (float x,float y) { this->Func1  (x,y);} // works 
    void callBaseFuncViaPtr (float x,float y) { this->(*FuncPtr)(x,y);} // wrong ... 
}; 

int main() 
{ 
    Derived Test; 

    Test.callBaseFunc1  (2.72f,3.14f); // works 
    Test.callBaseFuncViaPtr (2.72f,3.14f); // syntax error in function declaration... 

    getchar(); 
    return 0; 
} 

Благодаря

ответ

2

Вы почти имели, просто переместить скобки:

void callBaseFuncViaPtr (float x,float y) { (this->*FuncPtr)(x,y);} 
+0

О, спасибо. Работает сейчас! Я пробовал так много глупостей, но не это: P – Smith

Смежные вопросы