Учитывая класс, такой как приведенный ниже, и данное объединение, как можно инициализировать объединение с правильным значением?
Здесь делается попытка использовать два или более различных типов в качестве одного из основных типов данных для класса. Вместо использования 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;
};
После поиска решения ответ стал очевидным и, возможно, мог бы стать хорошим решением для этого хранилища ответов, поэтому я включу его ниже.