如何在 C++ 中将 typedef 与 class 初始值设定项参数一起使用?
How do I use typedef with class initializer parameters in C++?
我这样问这个问题是因为我不知道如何表达更好。
现在,我正在使用 Eigen 库编写 3D 应用程序。 Eigen 只有一个向量 class,但我需要不同的向量和点数据类型。
两者都可以用
表示
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};
}
我这样问这个问题是因为我不知道如何表达更好。
现在,我正在使用 Eigen 库编写 3D 应用程序。 Eigen 只有一个向量 class,但我需要不同的向量和点数据类型。
两者都可以用
表示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};
}