私は、結果とエラーのいずれかを運ぶことができる単純な構造体を持っています。 どちらも同じタイプですが、分かりやすくするために2人のメンバーが必要です。 cppreference.comから、次のコードスニペットが有効なC++であるようです。 non trivial
クラス(このインスタンスではstd :: string)を整理するために、ユニオンデストラクタで配置を削除します。ユニオンはC++で、単純な型ではありません
struct Result {
union {
std::string resultText;
std::string errorText;
~(){ resultText.~string();}
};
};
それはのように見えますが、これを使用することを含む構造体は、明示的/コピーresultTextを移動するルールの-5のメンバーを実装する必要があります。
これは労働組合のために、このような奇妙なユースケースである - 単一のプライベート文字列と(getResultText() 'と' getErrorText() ''のような)2つのゲッターが悪いのでしょうか?デバッグ専用のフラグを追加して、正しいテキストを取得していることを確認することもできます。 –
また、結果がエラーまたは実際の結果であることを示すために、 'std :: string'と' bool'(またはenum)を持つ単純な構造体を持つこともできます。 @VittorioRomeoに同意する必要があります。そのために組合を使用するのは非常に奇妙な考えです。 –
ところで、あなたの構造体は実際には、実際に組合体から何を使用するかの弁別者を逃してしまいます。 –