Come procedere all'integrazione di un metodo se una classe base non lo fornisce. Mi piacerebbe riutilizzare il metodo della classe base se fornito.Adattamento di una classe base fornita da un modello
Esempio:
#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"
}
Beh, se ti piace davvero a farlo in questo modo, si ha un problema con la chiamata ordina comunque. Derivato è il tipo e fin tanto che Derived ha una funzione 'm()' sovrascriverà sempre la funzione di base 'm()' –
Stai mescolando concetti: ereditarietà, funzioni virtuali e modelli. Complessivamente è un odore di codice. Avere modelli, evitare l'ereditarietà e le funzioni virtuali. –