Dire che ho una classe template:Chiamare la versione non specificata di una funzione specializzandola in C++?
template <typename T>
class foo {
void do_someting(T obj) {
// do something generic...
}
};
e voglio specializzarmi fa_qualcosa, ma all'interno di esso voglio chiamare il "normale" funzione fai_qualcosa:
template<>
void foo<MyObj>::do_something(MyObj obj) {
// do something specific...
// and ALSO do something generic!
}
c'è un modo per riferirsi alla versione normale di do_qualcosa all'interno della mia funzione specializzata? O devo solo copiare il codice?
(So che potrei refactor foo in modo tale che non avrei questo problema esatto, ma come accade non posso davvero modificare il "vero" pippo, in quanto è codice fortemente condiviso.)
Non esiste una versione "normale" di "do_qualcosa" per il tipo "MyObj" - l'intero effetto della specializzazione del modello è quello di * sostituire * l'istanza che si otterrebbe dal modello base, con la classe/funzione definire nella specializzazione. –
possibile duplicato di [Come posso ottenere un modello specializzato per utilizzare la versione non specificata di una funzione membro?] (Http://stackoverflow.com/questions/347096/how-can-i-get-a-specialized-template- to-use-the-unspecialized-version-of-a-member) –
Giusto, ma il compilatore conosce il codice in foo :: do_qualcosa, non c'è motivo per cui non possa permettermi di fare riferimento ad esso in qualche modo. Sono assolutamente disposto a credere che questa caratteristica linguistica non esiste, però --- è quello che sto cercando di scoprire. –