más simple, más solución general: Sólo tiene que escribir una vieja sobrecarga normal de la función:
ostream& operator << (ostream &out,Vector<int>& vec)
{
// Your int-specific implementation goes here
}
Esto supone que los int
y no int
versiones Don' Tiene mucho código en común, ya que tiene que escribir dos implementaciones separadas.
SI desea utilizar una aplicación común de la función, con sólo una declaración if
dentro de esa diferencia, utilice la aplicación de 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
}
}
En general, no utilice typeid
si no lo hace Necesitar.
Para que lo sepas, no hay prácticamente un consenso que ha aceptado la respuesta equivocada. Podría querer no aceptarlo y elegir otro. :) – jalf
¡Gracias por todas sus aportaciones! Inicialmente, acepté la respuesta tipográfica porque la especialización parecía excesiva para la función simple que estaba escribiendo, pero más tarde terminé por hacer la función un poco más complicada, así que opté por la especialización de todos modos. – Meir