How would one initialize static data members of a template class differently for particular parameters?
I understand that templates are different than other kinds of classes and only what is used in the project ever gets instantiated. Can I list a number of different initializations f开发者_如何转开发or different parameters and have the compiler use whichever is appropriate?
For example, does the following work, and if not what is the correct way to do this? :
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...
Should work. You may need to put these into the .c file instead of the header.
int someClass<int>::someData = 5;
double someClass<double>::someData = 5.0;
Here is also a working partial template specialization with initialization of static data members:
// .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;
}
精彩评论