我正在编写一个Vec3类,并为了优化目的,我没有构造函数。 我也希望能够以x,y,z或者r,g,b或者OR作为标签访问其成员。 容易,你可能会想:使用工会初始化结构的联合很好
template <typename T> struct Vec3_t
{
union
{
T val[3];
struct { T x, y, z; };
struct { T r, g, b; };
};
};
然后,因为我没有男星,我想初始化它是这样的:
Vec3_t<int> v = {1, 2, 3};
,但我已经把双括号,因为我“M在结构中初始化一个结构(像这样:Vec3_t<int> v = {{1, 2, 3}}
)
所以,我的问题是:我怎么能做到这一点,这样我可以有不同的名称都访问,并与初始化1对大括号?
我的尝试:每个组件都有一个联合,但随后以access作为表退出(可以始终调用& vx并将其视为浮点[3],但这有点脏......而不是所以我想是安全的)
不成熟的优化是万恶之源。这是一个模板类,所以构造函数的源将在编译时可用。大多数现代编译器将使用所有这些信息来生成最优代码。节省一些时间并写一个构造函数。 –
其实,我不想要一个ctor,所以当我做一个'新的Vec3_t [x]'时,什么都不会被调用。但我做了一个小测试,似乎有一个空的默认ctor允许相同的...我想我会去ctor。 – Zonko
@Zonko如果我的答案在下面解决了你的问题,请你点击它旁边的复选标记(就在上下箭头的下方),将其标记为答案? –