我有主要用于数学目的的向量类,它们有 2 或 3 个元素。 (x,y,z。类型来自模板参数。)我想将其更改为使用元素数组的模板。像这样:
template<typename T, int element_count>
struct Vec
{
T elements[element_count];
//...
};
但我仍然希望能够使用任何类型的元素,而不仅仅是原始类型。目前向量的构造函数看起来像这样:
Vec(const Vec& A, const Vec& B)
:
x(B.x - A.x),
y(B.y - A.y),
z(B.z - A.z)
{
}
在初始化列表中初始化的坐标。对于新版本,我的第一个想法是在构造函数主体中使用 for 循环,但这不适用于没有默认构造函数的类型。 (加上构造 + 赋值的性能成本。)另一个想法是使用纯字节数组,并手动为元素调用placement-new 和析构函数。我认为这会使这个所谓的简单向量类变得过于混乱。或者也许使用一个帮助函数以某种方式为构造函数返回一个元素数组。
Vec(const Vec& A, const Vec& B)
:
elements(computeElements(A, B))
{
}
那么我怎样才能通过仍然保持这个向量类简单 / POD 来实现这一点?甚至有可能吗?
我知道矢量实现已经存在。这是一种做法。也让我想知道通常如何使用 init-list 中的计算值来初始化数组。