我之所以问这样的问题,是因为我不知道如何更好地表达它。
现在,我正在使用Eigen库编写3D应用程序。本征只有一个Vector类,但是我需要不同的向量和点数据类型。
两者都可以用
表示Eigen::Vector4d(x,y,z,w)
其中w对于一个点是1,对于一个矢量是0。
我知道我可以使用
定义类型typedef vec3d Eigen::Vector4d
或
#define point3d Eigen::Vector4d
但是有没有一种方法可以定义它,使得向量的w总是为0,点的总为1?
typedef vec3d(x,y,z) Eigen::Vector4d(x,y,z,w)
不起作用。
答案 0 :(得分:3)
您可以从中继承并提供新的构造函数:
struct vec3d : Eigen::Vector4d {
vec3d(double x, double y, double z) : Vector4d(x, y, z, 0) {}
};
或者,我更喜欢编写一个工厂函数,例如:
Eigen::Vector4D make_vector(double x, double y, double z) {
return {x, y, z, 0};
}