W jaki sposób wypełnisz metodę, jeśli klasa podstawowa jej nie dostarcza. Chciałbym ponownie użyć metody klasy bazowej, jeśli jest ona dostarczona.Dopasowywanie dostarczonej przez szablon klasy podstawowej
Np
#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"
}
dobrze, jeśli naprawdę chcesz zrobić to w ten sposób, masz problem z zaproszenia porządek mimo wszystko. Pochodna jest typem i tak długo jak Derived ma funkcję 'm()', zawsze będzie nadpisywać funkcję podstawową 'm()' –
Łączymy pojęcia: dziedziczenie, funkcje wirtualne i szablony. W sumie jest to zapach kodu. Mając szablony, unikaj dziedziczenia i funkcji wirtualnych. –