C++中boost向量的子类

Subclass of a boost vector in C++

本文关键字:子类 向量 boost C++      更新时间:2023-10-16

如何创建boost::numeric::ublas::c_vector<float, 3>的子类,该子类的三个元素可以用.x.y或.z访问,并且具有vec3(float x, float y, float z);形式的构造函数。我想使用boost向量,因为我不想自己为一个类的所有运算符和数学函数编写函数,而且我已经在使用boost库了。

例如:

foo = vec3(2.5f, 0.0f, 0.0f);
bar = vec3(2.0f, 0.0f, 0.0f);
foo += bar;
cout << foo.x; // prints 4.5

不要创建子类,因为基类成员函数是非虚拟的。在这种情况下,更喜欢composition(使此类的对象成为类的成员)。Herb Sutter还建议永远不要派生具体的类(尤其是在C++中,因为存在一个虚拟/非虚拟成员函数系统)。