【发布时间】:2014-04-26 15:59:38
【问题描述】:
我使用三个floats 的结构来表示平移和缩放,如下所示:
typedef struct Translation{
Translation() : x(0.0), y(0.0), z(0.0){};
Translation(x, y, z) : x(x), y(y), z(z){};
//some arithmetic operators
float x, y, z;
}
Translation;
typedef Translation Scale;
现在我也想用这个定义来表示旋转,但我不想访问他们的成员为x、y 和z,而是yaw、pitch 和@ 987654328@。是否可以通过typedef 重命名这样的成员?还是有另一种方法不包括重新定义完整的结构及其成员?
【问题讨论】:
-
没有。
typedef用于类型。x、y、z不是类型。 -
不要这样做。
Translation、Scale和Rotation都是不同的概念。它们都包含三个floats 的事实是偶然的,并不是在它们之间共享代码的好理由。typedef不会将一个类型复制到另一个类型,它只会创建一个别名。因此,您可以将Rotation传递给期望Scale的函数,因为它们只是同一类型的两个名称,这将颠覆所有类型安全的概念。 -
@Oktalist 非常好!我曾考虑过继承,但这引发了同样的问题。我想我应该分别定义这三个。
-
你为什么这么懒而不只是复制'n'paster代码,搜索替换?似乎需要几分钟的工作。
-
@EdHeal 因为一旦我更改了某个类的某些内容,这些更改就不会反映在其他类中。此外,这意味着可能会避免大量冗余代码。