2010-06-11 75 views
2

我有一個類C++模板特

template <typename T> 

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

我想專門下INT。

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

我想要保留int的默認打印方法,只是改變常量。 對於某些專業,我想保留K = 1並更改打印方法,因爲 不是< <運算符。

我該怎麼做?

回答

9

你可以做這樣的:

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; 
+0

如果一切都在被多次包括頭文件?這不會導致鏈接器中出現多重定義錯誤嗎? – user231536 2010-06-14 17:31:40

+0

@ user231536:你可以在頭文件中聲明'template <> const int C :: K;'以清楚地說明這種情況下有一個專門化, 然後把'... = 2; '.cpp文件中只有一個值的定義。 – sth 2010-06-14 20:48:16

3

在C++ 0x中:

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