0

我想编写类 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()’
4

3 回答 3

3

不,你不能。您不能拥有具有不同模板参数的模板类的两个版本。我建议以不同的方式调用这两种Stack或将它们放在不同的名称空间中。

于 2012-05-28T20:08:38.233 回答
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.
};

编辑:您不能更改模板参数的类型。

于 2012-05-28T20:09:02.713 回答
1

如果它们采用不同类型的参数,则必须给它们两个不同的名称。

于 2012-05-28T20:08:28.580 回答