2011-10-06 185 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; 
} 
相关问题