如何针对特定参数以不同方式初始化模板类的静态数据成员?
我理解模板与其他类不同,只有项目中使用的模板才会被实例化。我是否可以为不同的参数列出许多不同的初始化,并让编译器使用哪个适当的?
例如,以下是否有效,如果不正确,这是做什么的正确方法? :
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...
答案 0 :(得分: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;
}