C ++ шаблон класса специализации и структуры - PullRequest
1 голос
/ 28 ноября 2011

Я часами искал в Интернете решение, но безрезультатно. Я программирую на 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 */ }

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

1 Ответ

1 голос
/ 28 ноября 2011

Когда вы специализируете шаблон класса, вы должны специализировать ВСЕ функции-члены.

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

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

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