我正在尝试编写一个数学向量类。第一个版本如下:
template <typename T, unsigned int n>
struct Vector {
Vector<T, n>(T t = T()) // default
{
for (int i = 0; i < n; i++)
{
data[i] = t;
}
}
Vector<T, n>(const Vector<T, n> &aVector)
{
for (unsigned int i = 0; i < n; i++)
{
data[i] = aVector.data[i];
}
}
Vector<T, n>(const T arr[n])
{
for (unsigned int i = 0; i < n; i++)
{
data[i] = arr[i];
}
}
T& operator[](unsigned int i);
const T& operator[](unsigned int i) const;
Vector<T, n>& operator=(const Vector<T, n> &aVector);
void normalise();
T data[n];
};
我还在类之外声明了运算符(+、* 等),以及其他几个类。
事情是这样的。对于长度为 2、3、4 的向量,我想要一个以 x,y(对于 Vec2)、x、y、z 或 x、y、z、w 作为参数的构造函数(或函数)。
但是,您似乎无法为此目的制作专门的构造函数。在这种情况下我应该如何进行?我必须完全专门化三个案例吗?这不是意味着我必须重写代码块吗?
我也有一个类似的 Matrix 类(Matrix),我很确定我需要一些用于旋转、平移、缩放等的构造函数。我假设我需要克服类似的问题。
如果你看到
我还在类外声明了运算符(+、* 等),以及一些其他函数(点、十字等)。
事情是这样的。对于长度为 2、3、4 的向量,我想要一个以 x,y(对于 Vec2)、x、y、z 或 x、y、z、w 作为参数的构造函数(或函数)。
但是,您似乎无法为此目的制作专门的构造函数。在这种情况下我应该如何进行?我必须完全专门化三个案例吗?这不是意味着我必须重写代码块吗?
我也有一个类似的 Matrix 类(Matrix),我很确定我需要一些用于旋转、平移、缩放等的构造函数。我假设我需要克服类似的问题。
如果您在代码中看到任何对您来说似乎错误的地方,请随时指出。
编辑:如果我不够清楚,数组应该是一维的,并且它的所有组件都是相同的类型。专门针对具有 2、3 和 4 个元素的数组。