以下のようなクラスと指定された共用体が与えられた場合、どのように共用体を正しい値に初期化しますか?
ここで試みられているのは、クラスのコア データ型の 1 つとして 2 つ以上の異なる型を使用することです。void* を使用する代わりに、型が事前にわかっている場合、使用される型の共用体が構築されます。問題は、クラスがインスタンス化されるときに正しい共用体メンバーを初期化する方法です。型はポリモーフィックではないため、通常の継承モデルは適切ではないように思われました。正しい共用体メンバーを初期化するいくつかの素朴な試みは、どこにも行きませんでした。
union Union {
int n;
char *sz;
};
class Class {
public:
Class( int n ): d( 1.0 ), u( n ) {}
Class( char *sz ): d( 2.0 ), u( sz ) {}
....
double d;
Union u;
};
解決策を精査した後、答えが明らかになり、この回答のリポジトリの適切な解決策になる可能性があるため、以下に含めます.