2012-06-20 78 views
0

是否有一種方法可以在派生類中重載基類模板類函數,並且仍然可以調用基類函數,如下所述?C++如何在派生類中從派生類中調用重載的模板類函數?

template <class A> 
class testBase { 

public: 
    void insert() { 
    // Whatever 
    } 
}; 

class testDerived : public testBase<double> { 
private: 

    void insert(int a) { 
    // something 
    } 
}; 


int main() { 

    testDerived B; 

    // Compiler doesn't recognize overloaded insert, 
    // How do you do this? 
    B.insert(); 

} 

回答

3

您遇到的問題稱爲名稱隱藏

您可以通過名稱限定它調用基類的功能:

B.testBase<double>::insert(); 

或者通過「取消隱藏」吧,用using聲明,宣佈它在派生類中:

class testDerived : public testBase<double> { 
public: 
    using testBase<double>::insert; 
private: 
    void insert(int a) { 
    // something 
    } 
}; 
2

添加

public: 
    using testBase<double>::insert; 

testDerived定義。這將使派生類中的隱藏成員可用