模板专用化没有匹配的构造函数
Template specialization no matching constructor
我正在创建一个模板化的向量类,大致按以下方式完成:
// 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>')
.
我看过的所有类似问题都表明构造函数应该自动使用模板化类,所以我不确定这里发生了什么。我以前遇到没有模板专用化的类的构造函数错误,它列出了另一个构造函数不可行,这让我认为由于某种原因,构造函数没有被复制到模板化类中。
部分和显式专用化不会从主模板继承任何内容;它们完全不相关。在代码中,Vector<T, 3>
是一个完全空的类,静态成员函数除外。
当部分/显式专用化与主模板共享代码时,有一些方法可以减少代码重复(例如,通过从实现共享功能的基类模板继承),但在这种情况下,我认为没有理由首先编写部分专用化。只需将cross
设为免费的函数模板:
template <typename T, int DIMS>
class Vector
{
// Default constructor
Vector();
// Data constructor
Vector(const T data[DIMS]);
// Other functions, variables, operators
};
template<typename T>
Vector<T, 3> cross(const Vector<T, 3> a, const Vector<T, 3> b);
作为旁注,Vector(const T data[DIMS]);
可能不会做您认为它所做的事情 - 它完全等同于 Vector(const T *data);
.
相关文章:
- 具有专用化的模板类中的可靠条件复制和移动构造函数
- 构造函数 (g++) 的显式模板专用化
- 构造函数的部分模板专用化
- 如何在另一个类模板中定义完全专用类的构造函数
- 模板专用类之间的构造函数重载
- 使用模板的构造函数专用化
- 如何将模板构造函数专用化移动到 cpp 文件
- 模板类模板构造函数专用化
- 定义专用模板类构造函数时避免重复
- 模板化类的模板化构造函数的显式模板专用化
- 具有 n 个参数的模板专用构造函数
- 不会调用模板化构造函数的专用模板
- 没有模板参数的类的C++专用构造函数(跳过尖括号)
- 专用于非模板类的模板化构造函数
- 专用于模板类构造函数
- C++单个构造函数模板专用化
- 模板专用化没有匹配的构造函数
- 在模板专用化中添加单个构造函数方法
- 从派生类实现基类构造函数专用化的替代方法是什么
- 类定义中构造函数的模板专用化