【发布时间】: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<Container<T,alloc>> 的声明中修复一些问题,但我不确定是什么。 *编辑:错误是“折线:模板参数太少”。
【问题讨论】:
-
“这不起作用”是什么意思?同样在大多数情况下,您还需要在头文件中定义/实现函数
-
这不起作用 = 我收到错误“模板参数太少”,因此它无法与现有声明匹配。而且我不确定在头文件中定义/实现函数是什么意思?这是特定于模板模板类的东西吗?因为通常你在头文件中声明并在.cpp文件中实现。
标签: c++ templates header-files template-templates