Специализации и структуры классов шаблонов C++

Я часами искал в Интернете решение, но безрезультатно. Я программирую C++ в Xcode

#import "data.h" // contains a struct called data

template <class T>
class container {
    public:
        container();
        ~container();
    private:
        // functionality for containing T
};

template <class T>
container<T>::container() { /* generic */ }

template <class T>
container<T>::~container() { /* generic */ }

template <>
container<data>::container() { /* template specialization of data */ }

Компилятор жалуется: повторяется символ и указывает на специализацию шаблона класса. Я подумал, что, может быть, это из-за того, что конструкции не могут специализироваться, поэтому я попробовал что-то вроде добавления дополнительной функции void.

template <class T>
class container {
    public:
        container();
        ~container();
        void setup();
    private:
        // functionality for containing T
};

template <>
void container<data>::setup() { /* template specialization of data */ }

Но это дает мне ту же ошибку компилятора. Не знаю, где теперь искать решение...


person rwols    schedule 28.11.2011    source источник
comment
Что это за специализация шаблона? Напишите еще один класс для специализации.   -  person Paul Varghese    schedule 28.11.2011


Ответы (1)


При специализации шаблона класса необходимо специфицировать ВСЕ функции-члены.

В дополнение к настройке вам все еще нужно специализировать конструктор/деструктор.

template <>
container<data>::container()
{
  // ...
}

template <>
container<data>::~container()
{
  // ...
}
person vdsf    schedule 28.11.2011
comment
Спасибо, это получилось. Хотя мой шаблонный класс имеет множество функций, которые вообще не нуждаются в специализации. Я думаю, что я сделаю отдельный класс-оболочку. - person rwols; 29.11.2011