C++ 将模板传递给deque
我正在尝试为deque编写一个容器类来创建一个循环缓冲区(这里使用deque很重要,因为该类正在替换向量,并且需要像这里一样使用)。我不想让容器类特定于特定的deque;也就是说,我希望该类是一个模板类,而deque则获得模板类型。但是,我的代码在编译时使用了未定义的类型错误(c:\program files(x86)\microsoft visual studio 10.0\vc\include\deque(795):错误C2027:使用未定义的类型“dequeClass”) 守则:C++ 将模板传递给deque,c++,templates,C++,Templates,我正在尝试为deque编写一个容器类来创建一个循环缓冲区(这里使用deque很重要,因为该类正在替换向量,并且需要像这里一样使用)。我不想让容器类特定于特定的deque;也就是说,我希望该类是一个模板类,而deque则获得模板类型。但是,我的代码在编译时使用了未定义的类型错误(c:\program files(x86)\microsoft visual studio 10.0\vc\include\deque(795):错误C2027:使用未定义的类型“dequeClass”) 守则: #pra
#pragma once
#include <deque>
template<typename dequeClass>
class CircularDeque {
public:
CircularDeque(int newMax);
~CircularDeque();
void push_front(dequeClass&& val);
void push_front(const dequeClass& val);
void push_back(dequeClass&& val);
void push_back(const dequeClass& val);
std::deque<dequeClass> que;
int getMax();
void setMax(int newMax);
private:
unsigned int max;
};
CircularDeque<class dequeClass>::CircularDeque(int newMax) {
max = newMax;
}
void CircularDeque<class dequeClass>::push_front(dequeClass&& val) {
que.push_front(val);
if(que.size() > max) {
que.pop_back();
}
}
void CircularDeque<class dequeClass>::push_front(const dequeClass& val) {
que.push_front(val);
if(que.size() > max) {
que.pop_back();
}
}
void CircularDeque<class dequeClass>::push_back(dequeClass&& val) {
que.push_back(val);
if(que.size() > max) {
que.pop_front();
}
}
void CircularDeque<class dequeClass>::push_back(const dequeClass& val) {
que.push_back(val);
if(que.size() > max) {
que.pop_front();
}
}
int CircularDeque<class dequeClass>::getMax() {
return max;
}
void CircularDeque<class dequeClass>::setMax(int newMax) {
max = newMax;
}
#pragma一次
#包括
模板
类循环{
公众:
循环量(int-newMax);
~CircularDeque();
无效推前(dequeClass&val);
无效推前(const dequeClass&val);
无效推回(dequeClass&val);
无效推回(const dequeClass&val);
std::deque-que;
int getMax();
void setMax(int newMax);
私人:
无符号整数最大值;
};
CircularDeque::CircularDeque(int newMax){
max=newMax;
}
无效循环队列::向前推(dequeClass&&val){
que.向前推(val);
如果(que.size()>最大值){
突然,砰的一声回来了;
}
}
无效循环队列::向前推送(常量dequeClass和val){
que.向前推(val);
如果(que.size()>最大值){
突然,砰的一声回来了;
}
}
void CircularDeque::推回(dequeClass&&val){
q.推回(val);
如果(que.size()>最大值){
Q.pop_front();
}
}
无效循环查询::推回(const dequeClass&val){
q.推回(val);
如果(que.size()>最大值){
Q.pop_front();
}
}
int CircularDeque::getMax(){
返回最大值;
}
void CircularDeque::setMax(int newMax){
max=newMax;
}
有人知道我可以在这里做什么吗?模板类的每个内联成员都必须以模板参数列表开头。即:
CircularDeque<class dequeClass>::CircularDeque(int newMax) {
max = newMax;
}
CircularDeque::CircularDeque(int newMax){
max=newMax;
}
应该是这样的:
template<class dequeClass>
CircularDeque<dequeClass>::CircularDeque(int newMax) {
max = newMax;
}
模板
CircularDeque::CircularDeque(int newMax){
max=newMax;
}
对所有类外定义执行此操作。将函数定义内联或使用如下模板声明将其前置:
template<typename dequeClass>
CircularDeque<class dequeClass>::CircularDeque(int newMax) {
max = newMax;
}
模板
CircularDeque::CircularDeque(int newMax){
max=newMax;
}
如果您只是想专门化std::deque的行为,为什么不从它继承呢?只要不添加任何数据成员,就不需要虚拟析构函数,因此通过继承操作将删除大量重复的代码,否则您将无法编写这些代码。@ZacHowland True,这将大大减少我必须进行的更改。我会试试的。请记住,由于STL容器没有虚拟析构函数,所以您不想添加数据成员(因此您必须将模板修改为类似template-circular\u-deque:public-std::deque{…}
@ZacHowland谢谢,让它工作并继承了deque。非常感谢,它现在已经编译好了。我会在可能的时候接受答案,时间还不够长。