Die einfachste und allgemeinste Lösung: Schreiben Sie einfach eine einfache alte Überladung der Funktion:
ostream& operator << (ostream &out,Vector<int>& vec)
{
// Your int-specific implementation goes here
}
Dies setzt voraus, dass die int
und nicht int
Versionen haben nicht viel gemeinsamen Code, da Sie zwei separate Implementierungen schreiben müssen.
WENN Sie eine gemeinsame Implementierung der Funktion verwenden wollen, mit nur einer if
Anweisung innerhalb dieser Anweisung abweicht, verwenden Sie die Implementierung von 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
}
}
Verwenden Sie im Allgemeinen nicht typeid
wenn Sie es nicht brauchen.