我问这样的问题是因为我不知道如何更好地表达它。

现在,我正在使用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)


不起作用。

最佳答案

您可以从中继承并提供新的构造函数:

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};
}

关于c++ - 如何在C++中将typedef与类初始值设定项参数一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51116890/

10-11 21:50