C++模板有关问题
C++模板问题
下面是我写的队列类,使用模板的意图是储存我想要的数据,但是我所想要的数据的类型只能在入队的时候确定,其他时候都不能给模板一个参数列表。比如下面的两个函数,构造函数和入队函数,调用顺序肯定是构造函数先被调用,但是提示出错。
error C2955: 'quence' : use of class template requires template argument list
(类模板的使用需要模板的参数列表)
我如何能正确使用模板呢?
template <class elemtype>
class quence
{
public:
quence(int size=10);
elemtype get_head();//读队头元素
void de_quence();//删队
void en_quence();//入队
bool isempty();//判断队列是否为空
private:
void double_size();//扩大数组内存
elemtype *elem;
int front;//头
int rear;//后
int maxsize;//队列最大值
};
template <class elemtype>
void en_quence(elemtype &data)
{
rear=(rear+1)%maxsize;
elem[rear]=data;
}
template <class elemtype>
quence::quence(int size=10)
{
elem=new elemtype[size];
}
------解决方案--------------------
template <class elemtype>
void quence<elemtype>::en_quence(elemtype &data)
{
rear=(rear+1)%maxsize;
elem[rear]=data;
}
template <class elemtype>
quence<elemtype>::quence(int size=10)
{
elem=new elemtype[size];
}
其他有没有问题不确定,至少得这样吧。。。
------解决方案--------------------
你这种需求使用 boost::any 就好了. 要自己做的话也可以参考它的实现来, 你这样实现的模板类是无法满足你的要求的.
下面是我写的队列类,使用模板的意图是储存我想要的数据,但是我所想要的数据的类型只能在入队的时候确定,其他时候都不能给模板一个参数列表。比如下面的两个函数,构造函数和入队函数,调用顺序肯定是构造函数先被调用,但是提示出错。
error C2955: 'quence' : use of class template requires template argument list
(类模板的使用需要模板的参数列表)
我如何能正确使用模板呢?
template <class elemtype>
class quence
{
public:
quence(int size=10);
elemtype get_head();//读队头元素
void de_quence();//删队
void en_quence();//入队
bool isempty();//判断队列是否为空
private:
void double_size();//扩大数组内存
elemtype *elem;
int front;//头
int rear;//后
int maxsize;//队列最大值
};
template <class elemtype>
void en_quence(elemtype &data)
{
rear=(rear+1)%maxsize;
elem[rear]=data;
}
template <class elemtype>
quence::quence(int size=10)
{
elem=new elemtype[size];
}
------解决方案--------------------
template <class elemtype>
void quence<elemtype>::en_quence(elemtype &data)
{
rear=(rear+1)%maxsize;
elem[rear]=data;
}
template <class elemtype>
quence<elemtype>::quence(int size=10)
{
elem=new elemtype[size];
}
其他有没有问题不确定,至少得这样吧。。。
------解决方案--------------------
你这种需求使用 boost::any 就好了. 要自己做的话也可以参考它的实现来, 你这样实现的模板类是无法满足你的要求的.
- C/C++ code
#include <boost/any.hpp> #include <deque> #include <string> struct X { int x, y, z; }; int main() { std::deque<boost::any> dq; dq.push_back(10); dq.push_back(std::string("hello")); X x = {10, 20, 40}; dq.push_back(x); }