如何在 C++ 中将 typedef 与类初始值设定项参数一起使用?

Posted

技术标签:

【中文标题】如何在 C++ 中将 typedef 与类初始值设定项参数一起使用?【英文标题】:How do I use typedef with class initializer parameters in C++? 【发布时间】:2018-06-30 17:00:56 【问题描述】:

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

现在,我正在使用 Eigen 库编写一个 3D 应用程序。 Eigen 只有一个 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) 

没用。

【问题讨论】:

#define point3d Eigen::Vector4d 请不要再写一遍,这是非常糟糕的做法。 是的,我知道,我不会在 C++ 中使用它,但它至少是一种可能的方式。 为此使用宏或工厂方法 【参考方案1】:

你可以继承它并提供一个新的构造函数:

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++ 中将 typedef 与类初始值设定项参数一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 C++ 中的 typedef 重定义?

为啥我不能像往常一样初始化 typedef struct string 或 char?

如何在c ++中的类构造函数中将整个数组初始化为单个元素

如何在 C++ 中的 map STL 中将键作为类插入

无法在 Visual Studio 2015 中将 typedef 转换为 std::pair

《Java编程思想》05.初始化与清理