ユニオンとその有用性についてもっと学ぼうとしていたとき、次のコードが完全に有効であり、期待どおりに機能することに驚きました。
template <class T>
union Foo
{
T a;
float b;
Foo(const T& value)
: a(value)
{
}
Foo(float f)
: b(f)
{
}
void bar()
{
}
~Foo()
{
}
};
int main(int argc, char* argv[])
{
Foo<int> foo1(12.0f);
Foo<int> foo2((int) 12);
foo1.bar();
foo2.bar();
int s = sizeof(foo1); // s = 4, correct
return 0;
}
これまで、テンプレート、コンストラクタ、デストラクタ、さらにはメンバー関数で共用体を宣言することが合法であることを知りませんでした。参考までに、私は Visual Studio 2012 を使用しています。
この方法でユニオンを使用する方法についてインターネットで検索したところ、何も見つかりませんでした。これは C++ の新機能ですか、それとも MSVC 固有のものですか? そうでない場合は、ユニオン、特にクラスのように使用される例 (上記) について詳しく知りたいと思います。誰かが共用体とそのデータ構造としての使用法についてのより詳細な説明を教えてくれれば、非常にありがたいです。