![](/img/trans.png)
[英]is there a way to put condition on constant value parameter in C++ template specialization?
[英]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.