在头文件和实现文件中创建模板模板函数

时间:2018-05-12 20:35:15

标签: c++ templates header-files template-templates

所以我有PolyLine类,我试图通用化以允许stl容器(如list或vector)充当类容器。我正在尝试使用模板模板函数来执行此操作:

template<typename T, template<typename, typename> class Container, typename alloc = std::allocator<T>>
class PolyLine : public CAD::Shape {
private:
  size_t _n_points; //Number of points
  Container<T, alloc> _pline;
public:

  //Constructors
  PolyLine(size_t, double);
  PolyLine(const PolyLine&); //Copy constructor

  //Print
  void print();

  //Operator overload functions
  PolyLine& operator = (const PolyLine&);


};

我正在尝试在实现文件中实现这样的函数:

#include "PolyLine.hpp"

template<typename T, template<typename,typename> class Container, typename alloc = std::allocator<T>>
PolyLine<Container<T, alloc>>::PolyLine(size_t size, double distance) :  Shape(), _n_points(size) {
};

这不起作用,显然我需要在PolyLine<Container<T,alloc>>的声明中修改一些内容,但我不确定是什么。 *编辑:错误是get&#34; PolyLine:模板参数太少&#34;。

1 个答案:

答案 0 :(得分:1)

您还没有为PolyLine专门设置Container<T, alloc>,因此我们可以提供的唯一构造函数定义是默认特化(PolyLine<T, Container, alloc>)的定义:

template<typename T, template<typename,typename> class Container, typename alloc>
PolyLine<T, Container, alloc>::PolyLine(size_t size, double distance) 
: Shape(), _n_points(size) 
{
}