このようなことを行う方法はありません.C++にはありますか?
union {
{
Scalar x, y;
}
Scalar v[2];
};
どこx == v[0]
でy == v[1]
?
CではなくC++を使用していて、それらは同じタイプであるため、v [0]へのxa参照とv [1]へのya参照を作成しないのはなぜですか
どうですか
union {
struct {
int x;
int y;
};
int v[2];
};
編集:
union a {
struct b { int first, second; } bee;
int v[2];
};
醜いが、それはより正確です
これを試して:
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;
}
私は以前にこのようなものを使用しました。標準で100%OKかどうかはわかりませんが、使用する必要のあるコンパイラでは問題ないようです。
struct Vec2
{
float x;
float y;
float& operator[](int i) { return *(&x+i); }
};
必要に応じて、境界チェックなどをoperator []に追加できます(おそらく必要です)。また、operator[]のconstバージョンを提供することもできます。
パディングが心配な場合(そして、構造体のパディングを強制的に解除するために適切なプラットフォーム固有のビットを追加したくない場合)、次を使用できます。
struct Vec2
{
float x;
float y;
float& operator[](int i) {
assert(i>=0);
assert(i<2);
return (i==0)?x:y;
}
const float& operator[](int i) const {
assert(i>=0);
assert(i<2);
return (i==0)?x:y;
}
};
「スカラー」が何であるかにもよりますが、はい、C++でそれを行うことができます。構文は、あなたがあなたの例で書いたものとほぼ同じです(おそらく正確に正確かもしれませんが、私はユニオンに錆びています)。ユニオンに入れることができる型に制限があることを除いて、C と同じです (IIRC にはデフォルトのコンストラクターが必要です)。関連するウィキペディアの記事は次のとおりです。