C ++模板类的特化和结构

时间:2011-11-28 19:11:27

标签: c++ templates struct specialization

我花了几个小时在网上搜索解决方案,但无济于事。我正在用Xcode编写C ++

#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 个答案:

答案 0 :(得分:1)

当您专门化类模板时,您必须专门化所有成员函数。

除了设置之外,您还需要专门构造构造函数/析构函数。

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

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