3

我正在尝试在模板类中定义模板成员。

这是头文件的片段:

template <typename Type>
class Queue
{
private:
// class scope definitions
    // Node is a nested structure definition local to this class
    struct Node {Type item; struct Node* next;};
    enum {Q_SIZE = 10};
    template <typename Type2> class DeepCopy // template member
    {
    public:
        void docopy(Type2& d, const Type2& s);
    };
...

因此定义了模板成员,但我想对 docopy 方法进行显式特化,以便在类型为指针时进行深度复制。我将使用方法模板和特化从头文件中放入另一个片段:

// template member
template <typename Type>
    template <typename Type2>
void Queue<Type>::DeepCopy<Type2>::docopy(Type2& d, const Type2& s)
{
    d = s;
}

// template member specialization for pointers
template <typename Type>
    template <typename Type2>
void Queue<Type*>::DeepCopy<Type2*>::docopy(Type2* d, const Type2* s)
{
    if (s)
        d = new (*s);
    else
        d = 0;
}

编译器向我发送以下错误:“<”标记之前的预期初始化程序。

我无法弄清楚我做错了什么。有什么帮助吗?

4

2 回答 2

2

对于您的示例,您应该

  1. 的部分专业化Queue课程T*
  2. Queue<T*>在struct的写入定义的部分专业化中DeepCopy
  3. Queue<T*>::DeepCopy编写for 的专业化U*
  4. 写函数Queue<T*>::DeepCopy<U*>::docopy
于 2012-09-09T12:37:59.623 回答
2

您应该在 Queue 之外编写 DeepCopy 作为顶级模板。仅在您的队列中使用它。

   template <typename T>
   class Queue { 
      DeepCopy<T> myCopy;
      ....
          myCopy.doCopy(n.item, newItem);
于 2012-09-09T12:50:43.863 回答