类Stack的模板特化

时间:2012-05-28 20:04:18

标签: c++ templates

我想写两个不同的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()’

3 个答案:

答案 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)

如果他们采用不同类型的参数,你必须给他们两个不同的名字。