我有类Queue
,它使用模板实现,一个参数用于类型,一个常量参数用于队列大小。
template <typename T, int N>
class Queue
{
.....
void enqueue(T x);
}
我想专门针对typename使用enqueue
方法,但我无法知道如何执行此操作。
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)
答案 0 :(得分:1)
由于您的类模板具有非模板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()
委托给一个专门的小助手类。
答案 1 :(得分:0)
我通过扩展Queue类来解决:
class QueueSpec: public Queue<Heap<struct infoNode>, SIZE >
{
public:
void enqueue(Heap<struct infoNode> x);
};
---
void QueueSpec::enqueue(Heap<struct infoNode> x) {}