Самое простое, самое общее решение:
Просто напишите старую простую перегрузку функции:
ostream& operator << (ostream &out,Vector<int>& vec)
{
// Your int-specific implementation goes here
}
Это предполагает, что версии int
и не int
не имеют много общего кода, так как вам нужно написать две отдельные реализации.
Если вы хотите использовать одну общую реализацию функции, с разным выражением if
внутри, используйте реализацию Чарльза Бейли:
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
}
}
В общем, не используйте typeid
, если вам не нужно.