如何去除C++模板

// TEMPLATE CLASS queue
template<class _Ty,
class _Container = deque<_Ty> >
class queue
{ // FIFO queue implemented with a container
public:
typedef _Container container_type;
typedef typename _Container::value_type value_type;
typedef typename _Container::size_type size_type;
typedef typename _Container::reference reference;
typedef typename _Container::const_reference const_reference;

queue()
: c()
{ // construct with empty container
}

explicit queue(const _Container& _Cont)
: c(_Cont)
{ // construct by copying specified container
}

bool empty() const
{ // test if queue is empty
return (c.empty());
}

size_type size() const
{ // return length of queue
return (c.size());
}

reference front()
{ // return first element of mutable queue
return (c.front());
}

const_reference front() const
{ // return first element of nonmutable queue
return (c.front());
}

reference back()
{ // return last element of mutable queue
return (c.back());
}

const_reference back() const
{ // return last element of nonmutable queue
return (c.back());
}

void push(const value_type& _Val)
{ // insert element at beginning
c.push_back(_Val);
}

void pop()
{ // erase element at end
c.pop_front();
}

const _Container& _Get_container() const
{ // get reference to container
return (c);
}

protected:
_Container c; // the underlying container
};
剩余的在图片中

这么queue简单有必要用STL的改写吗?而且大部分功能是deque这个容器提供的。

给你一个参考,估计你还要改一次deque。

typedef deque<_Ty> _Container;

class queue
{ // FIFO queue implemented with a container
public:
typedef _Container container_type;
typedef typename _Container::value_type value_type;
typedef typename _Container::size_type size_type;
typedef typename _Container::reference reference;
typedef typename _Container::const_reference const_reference;

queue()
: c()
{ // construct with empty container
}

explicit queue(const _Container& _Cont)
: c(_Cont)
{ // construct by copying specified container
}

bool empty() const
{ // test if queue is empty
return (c.empty());
}

size_type size() const
{ // return length of queue
return (c.size());
}

reference front()
{ // return first element of mutable queue
return (c.front());
}

const_reference front() const
{ // return first element of nonmutable queue
return (c.front());
}

reference back()
{ // return last element of mutable queue
return (c.back());
}

const_reference back() const
{ // return last element of nonmutable queue
return (c.back());
}

void push(const value_type& _Val)
{ // insert element at beginning
c.push_back(_Val);
}

void pop()
{ // erase element at end
c.pop_front();
}

const _Container& _Get_container() const
{ // get reference to container
return (c);
}

protected:
_Container c; // the underlying container
};

bool operator==(const queue& _Left, const queue& _Right)
{
return  _Left._Get_container() == _Right._Get_container();
}

bool operator!=(const queue& _Left, const queue& _Right)
{
return  (!(_Left == ));
}

bool operator<(const queue& _Left, const queue& _Right)
{
return  _Left._Get_container() < _Right._Get_container();
}

bool operator>(const queue& _Left, const queue& _Right)
{
return (_Right < _Left);
}

来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-14
不知道编译器在编译的时候能不能实例化,然后写入到文件,不能的话估计就只能手动去除模板了哦
相似回答