【问题标题】:Create a template template function in header and implementation file在头文件和实现文件中创建模板模板函数
【发布时间】:2018-05-12 20:35:15
【问题描述】:

所以我有一个 PolyLine 类,我试图对其进行泛化以允许 stl 容器(如列表或向量)充当类容器。我正在尝试使用模板模板函数来执行此操作:

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&lt;Container&lt;T,alloc&gt;&gt; 的声明中修复一些问题,但我不确定是什么。 *编辑:错误是“折线:模板参数太少”。

【问题讨论】:

  • “这不起作用”是什么意思?同样在大多数情况下,您还需要在头文件中定义/实现函数
  • 这不起作用 = 我收到错误“模板参数太少”,因此它无法与现有声明匹配。而且我不确定在头文件中定义/实现函数是什​​么意思?这是特定于模板模板类的东西吗?因为通常你在头文件中声明并在.cpp文件中实现。

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


【解决方案1】:

您还没有将PolyLine 特化为Container&lt;T, alloc&gt;,因此我们可以提供的唯一构造函数定义是那些用于默认特化的构造函数定义(PolyLine&lt;T, Container, alloc&gt;):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 2022-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多