【发布时间】:2015-01-03 06:15:46
【问题描述】:
我正在创建一个模板化的矢量类,大致按以下方式完成:
// Main class
template <typename T, int DIMS>
class Vector
{
// Default constructor
Vector();
// Data constructor
Vector(const T data[DIMS]);
// Other functions, variables, operators
};
// 3d specialization
template <typename T>
class Vector<T, 3>
{
// Cross product for 3d vectors -- only thing in specialization
static Vector<T, 3> cross(const Vector<T, 3> a, const Vector<T, 3> b);
};
对于主模板,我有一个默认构造函数以及一个指定元素的构造函数。当我尝试使用带有元素的构造函数进行编译时,出现错误no matching constructor for initialization of 'Vec3f' (aka 'Vector<float, 3>')。
我看过的所有类似问题都表明构造函数应该自动使用模板类,所以我不确定这里发生了什么。我之前在没有模板特化的类中遇到了构造函数错误,它列出了另一个构造函数不可行,这让我认为构造函数由于某种原因没有被复制到模板类。
【问题讨论】:
-
您确实需要发布比这更多的代码...无论如何,如果您要的是,主模板中的任何内容都不会复制到部分专业化中。它们完全不相关。
-
我添加了构造函数代码和专业化的所有内容。如果包含其他内容有帮助,请告诉我。
-
@T.C.这是否意味着我必须将构造函数、函数、运算符等的所有声明和定义从模板复制到专业化?这不是违背模板的目的吗?
标签: c++ templates constructor