più semplice, soluzione più generale: Basta scrivere la pianura vecchio overload della funzione:
ostream& operator << (ostream &out,Vector<int>& vec)
{
// Your int-specific implementation goes here
}
Questo presuppone che i int
e non int
versioni don' Ho molto codice in comune, dato che devi scrivere due implementazioni separate.
SE si desidera utilizzare un'implementazione comune della funzione, con solo un if
istruzione all'interno che si differenzia, usare l'esecuzione di Charles Bailey:
template< class T >
struct TypeIsInt
{
static const bool value = false;
};
template<>
struct TypeIsInt<int>
{
static const bool value = true;
};
template <typename T>
ostream& operator << (ostream &out,Vector<T>& vec)
{
if (TypeIsInt<T>::value) {
// your int-specific code here
}
}
In generale, non utilizzare typeid
se non lo fai bisogno di.
Solo così si sa, non c'è praticamente un consenso che hai accettato la risposta sbagliata. Potrebbe desiderare di non accettarlo e sceglierne un altro. :) – jalf
Grazie per tutto il tuo contributo! Inizialmente ho accettato la risposta di tipo perché la specializzazione mi sembrava eccessiva per la semplice funzione che stavo scrivendo, ma più tardi ho finito per rendere la funzione un po 'più complicata, quindi ho optato comunque per la specializzazione. – Meir