关于模板的模板参数问题
头文件内容:
#include <deque>
#include <stdexcept>
#include <memory>
template <typename T,
template <typename ELEM,
typename = std::allocator<ELEM> >
class CONT = std::deque>
class Stack
{
private:
CONT<T> elems;
public:
void push(T const &);
void pop();
T top() const;
bool empty() const
{
return elems.empty();
}
template<typename T2,
template<typename ELEM2,
typename = std::allocator<ELEM2>
>class CONT2>
Stack<T, CONT>& operator= (Stack<T2, CONT2> const &);
};
template <typename T, template<typename, typename> class CONT>
void Stack<T, CONT>::push(T const &elem)
{
elems.push_back(elem);
}
template <typename T, template<typename, typename> class CONT>
void Stack<T, CONT>::pop()
{
if(elems.empty())
{
throw std::out_of_range("Stack<>::pop() : stack is empty");
}
elems.pop_back();
}
template <typename T, template<typename, typename> class CONT>
T Stack<T, CONT>::top()const
{
if(elems.empty())
{
throw std::out_of_range("Stack<T,CONT>::top() : empty stack");
}
return elems.back();
}
template <typename T, template<typename, typename> class CONT>
template <typename T2, template<typename, typename> class CONT>
Stack<T, CONT>&
Stack<T, CONT>::operator= (Stack<T2, CONT> const &op2)
{
if( (void*)this == (void*)&op2 )
{
return *this;
}
Stack<T2, CONT> tmp(op2);
elems.clear();
while(!tmp.empty())
{
elems.push_back(tmp.top());
tmp.pop();
}
return *this;
}
//.cpp
#include <iostream>
#include "stack4.h"
#include <string>
#include <cstdlib>
#include <vector>
int main()
{
try{
Stack<int>intstack;
}
catch(std::exception const &ex)
{
std::cerr << "Exception : " << ex.what() << std::endl;
}
return 0;
}
帮忙看下, 什么问题??
谢谢了.
[解决办法]
我的代码是编译测试后的代码
在vs2005下是正常的
关于模板的模板参数有关问题
关于模板的模板参数问题头文件内容:#include deque#include stdexcept#include memorytemplate typ
