初始化模板类的静态数据成员的部分模板特化
问题描述:
如何初始化特定参数的模板类的静态数据成员?初始化模板类的静态数据成员的部分模板特化
我明白,模板是不同于其他种类,只有在项目中使用的东西得到实例化。我可以针对不同的参数列出许多不同的初始化,并让编译器使用适合的任何一种?
例如,做了以下工作,如果不是这样做的正确方法是什么? :
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...
答
应该工作。您可能需要将这些放入.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;
}