在C++中有没有办法做这样的事情?
union {
{
Scalar x, y;
}
Scalar v[2];
};
Run Code Online (Sandbox Code Playgroud)
哪里x == v[0]
和y == v[1]
?
Bri*_*ndy 18
由于您使用的是C++而不是C,并且因为它们属于相同的类型,为什么不将xa引用到v [0]并且引用v [1]
fid*_*ido 14
怎么样
union {
struct {
int x;
int y;
};
int v[2];
};
Run Code Online (Sandbox Code Playgroud)
编辑:
union a {
struct b { int first, second; } bee;
int v[2];
};
Run Code Online (Sandbox Code Playgroud)
丑陋,但更准确
试试这个:
template<class T>
struct U1
{
U1();
T v[2];
T& x;
T& y;
};
template<class T>
U1<T>::U1()
:x(v[0])
,y(v[1])
{}
int main()
{
U1<int> data;
data.x = 1;
data.y = 2;
}
Run Code Online (Sandbox Code Playgroud)
我以前用过这样的东西。我不确定它的标准是否 100% OK,但是对于我需要使用它的任何编译器似乎都可以。
struct Vec2
{
float x;
float y;
float& operator[](int i) { return *(&x+i); }
};
Run Code Online (Sandbox Code Playgroud)
如果您愿意(您可能应该想要),您可以向 operator[] 添加边界检查等,并且您也可以提供 operator[] 的 const 版本。