繁体   English   中英

具有常量参数时的模板特化

[英]Template specialization when having a constant parameter

我有使用模板实现的类Queue ,类型的一个参数和队列大小的一个常量参数。

  template <typename T, int N>
  class Queue
  {
     .....
     void enqueue(T x);
  }

我想专门化enqueue方法,对于typename,但我无法想象如何做到这一点。

 template <typename T, int N>
 void Queue<Heap<struct infoNod>, N>::enqueue(Heap<struct infoNode> x)
 {}

为了专门化整个班级,我不确定我是否做得对:在标题中:

 template <>
 class Queue<Heap<struct infoNode>, 100>
 {
    public:
       void enqueue(Heap<struct infNode> x);
 }; 

在cpp:

template <>
 void Queue<Heap<struct infoNod>, 100>::enqueue(Heap<struct infoNode> x) {}

错误:

Queue.cpp:77:6: error: template-id ‘enqueue<>’ for ‘void Queue<Heap<infoNod>, 100>::enqueue(Heap<infoNode>)’ does not match any template declaration
 void Queue<Heap<struct infoNod>, 100>::enqueue(Heap<struct infoNode> x)
      ^
Queue.cpp:77:78: note: saw 1 ‘template<>’, need 2 for specializing a member function template
 void Queue<Heap<struct infoNod>, 100>::enqueue(Heap<struct infoNode> x)

由于您有一个带有非模板enqueue()方法的类模板,因此您只能部分地专门化整个类,而不是单个方法:

template <typename T, int N>
class Queue
{
    void enqueue(T x) { /* default implementation */ }
};

template<int N>
class Queue<Heap<InfoNode>, N>
{
   void enqueue(Heap<InfoNode> x) { /* specialized implementation */ }
};

另一种方法是不专门化整个Queue类,而是将enqueue()委托给一个专门的小助手类。

我通过扩展Queue类解决了:

class QueueSpec: public Queue<Heap<struct infoNode>, SIZE >
{
    public:
        void enqueue(Heap<struct infoNode> x);
};

---
void QueueSpec::enqueue(Heap<struct infoNode> x) {}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM