2011-10-06 138 views
0

如何初始化特定參數的模板類的靜態數據成員?初始化模板類的靜態數據成員的部分模板特化

我明白,模板是不同於其他種類,只有在項目中使用的東西得到實例化。我可以針對不同的參數列出許多不同的初始化,並讓編譯器使用適合的任何一種?

例如,做了以下工作,如果不是這樣做的正確方法是什麼? :

template<class T> 
class someClass 
{ 
    static T someData; 
    // other data, functions, etc... 
}; 

template<class T> 
T someClass::someData = T.getValue(); 

template<> 
int someClass<int>::someData = 5; 

template<> 
double someClass<double>::someData = 5.0; 

// etc... 

回答

1

應該工作。您可能需要將這些放入.c文件而不是標題。

int someClass<int>::someData = 5; 
double someClass<double>::someData = 5.0; 

這裏也是一個工作模板偏特靜態數據成員的初始化:

// .h 
template <class T, bool O> 
struct Foo { 
    T *d_ptr; 
    static short id; 
    Foo(T *ptr) : d_ptr(ptr) { } 
}; 
template <class T> 
struct Foo<T, true> { 
    T *d_ptr; 
    static short id; 
    Foo(T *ptr) : d_ptr(ptr) { } 
}; 
template<class T, bool O> 
short Foo<T, O>::id = 0; 
template<class T> 
short Foo<T, true>::id = 1; 

//.cpp 
int main(int argc, char *argv[]) 
{ 
    Foo<int, true> ft(0); 
    Foo<int, false> ff(0); 
    cout << ft.id << " " << ff.id << endl; 
} 
相關問題