我想写两个不同的Stack类实现。
(1)
template<typename element_type, typename container_type = std::vector<element_type> >
class Stack{//...
};
(2)
template<typename element_type, size_t container_size>
class Stack{
};
如果我在单个文件中定义两个实现,则会出现编译器错误。是否可以将它们放在同一个文件中?
//compiler errors:
Stack.hpp:119:46: error: declaration of template ‘template<class element_type, long unsigned int container_size> int containers::Stack()’
Stack.hpp:25:9: error: conflicts with previous declaration ‘template<class element_type, class container_type> class containers::Stack’
Stack.hpp:25:9: error: previous non-function declaration ‘template<class element_type, class container_type> class containers::Stack’
Stack.hpp:119:46: error: conflicts with function declaration ‘template<class element_type, long unsigned int container_size> int containers::Stack()’
答案 0 :(得分:3)
Stack
或将它们放在不同的命名空间中。
答案 1 :(得分:2)
你必须写下这样的东西:
template<typename element_type, typename container_type = std::vector<element_type> >
class Stack {
// This is *not* the specialization
};
template<typename element_type>
class Stack<element_type, std::vector<element_type> > {
// Specialization goes here.
};
编辑:您无法更改模板参数的类型。
答案 2 :(得分:1)
如果他们采用不同类型的参数,你必须给他们两个不同的名字。