共用体はC++ 11でテンプレート化することができます。例えば、the reference implementation of std::optionalで使用されています。ユニオンはテンプレート化できますか?
C++ 11以前は可能でしたか?
共用体はC++ 11でテンプレート化することができます。例えば、the reference implementation of std::optionalで使用されています。ユニオンはテンプレート化できますか?
C++ 11以前は可能でしたか?
はい、これは常に許可されているようです。共用体はクラスであり、テンプレートは関数またはクラス・テンプレートのいずれかです。標準の
関連部分:テンプレート宣言で
[TEMP]
宣言条
- 宣言または関数を定義またはクラス、[...]
組合がで定義されたクラスがある
[クラス]クラスキー
union
(だから、一つは新しい型特性std::is_class
が軽微であることを主張するかもしれません誤称。特徴は、種類のスペースを仕切ることになっている、とそうis_union
は別の、相互に排他的な形質である)
私は「組合はクラスです」ということさえ知りませんでした!私はこの質問を喜んで:) – Drax
はい、私が使用した構造をその前のように:。
template <typename T>
union test
{
unsigned char ch[sizeof(T)];
T variable;
};
'のstd :: optional'もう –
(それが奇数クラスの先頭に初期化フラグを配置することを決定していないデータメンバです。私は安い参照解除が妥当性をチェックするよりも望ましいmoresoだろうと思ったでしょう。)それ@KerrekSB –
は悲しいです:-(ではありません実装のためには、[boost :: optional implementation](http://www.boost.org/doc/libs/1_55_0/boost/optional/optional.hpp)でもそのように見えます。データの前にブール値を設定します。 – Drax