Частичная специализация шаблона для инициализации статических данных членов шаблонных классов - PullRequest
0 голосов
/ 06 октября 2011

Как можно по-разному инициализировать члены статических данных шаблонного класса для определенных параметров?

Я понимаю, что шаблоны отличаются от других классов, и когда-либо создается только то, что используется в проекте. Могу ли я перечислить несколько различных инициализаций для разных параметров и использовать компилятор в зависимости от того, что подходит?

Например, работает ли следующее, и если нет, как правильно это сделать? :

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 Ответ

1 голос
/ 19 января 2012

Должно работать. Возможно, вам придется поместить их в файл .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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...