如果基類不提供它,你將如何去填充方法。如果提供的話,我想重用基類方法。修改模板提供的基類
如:
#include <iostream>
struct Base0 { };
struct Base1 { void m() { std::cout<<"Base1\n"; } };
template<typename T>
struct Derived : public T {
//if T doesn't provide m, define it here, otherwise reuse the base class method
void m(){ /*? std::cout<<"Derived\n"; ?*/ }
};
int main(){
Derived<Base0> d0;
d0.m(); //should print "Derived"
Derived<Base1> d1;
d1.m(); //should print "Base1"
}
好吧,如果你真的很喜歡做這種方式,你得到了與調用問題無論如何,順序。 Derived是類型,只要Derived有一個函數'm()'它總是會覆蓋基函數'm()' –
您正在混合的概念:繼承,虛函數和模板。總之它是一種代碼味道。有模板,避免繼承和虛擬功能。 –