C ++ шаблонная специализация - PullRequest
2 голосов
/ 11 июня 2010

У меня есть класс

template <typename T>

    class C
    {
     static const int K=1;
     static ostream& print(ostream& os, const T& t) { return os << t;}
    };

Я хотел бы специализировать C для int.

 //specialization for int
 template <>
 C<int>{
 static const int K=2;
}

Я хочу, чтобы метод печати по умолчанию работал, чтобы int оставался и просто менял константу. Для некоторых специализаций я хочу сохранить K = 1 и изменить метод печати, потому что там << не является оператором. </p>

Как мне это сделать?

Ответы [ 2 ]

9 голосов
/ 11 июня 2010

Вы можете сделать это так:

template <typename T>
class C {
   static const int K;
   static ostream& print(ostream& os, const T& t) { return os << t;}
};

// general case
template <typename T>
const int C<T>::K = 1;

// specialization
template <>
const int C<int>::K = 2;
3 голосов
/ 11 июня 2010

В C ++ 0x:

static const int K = std::is_same<T, int>::value ? 2 : 1;

...