Я не полностью понимаю использование вариантов, может быть, кто-то может понять, что я делаю неправильно (возможно, мой подход).
Пусть вариантный объект будет _Types двух классов, оба наследуют один и тот же класс.
class base
{
public:
int foo;
};
class a: public base
{
int bar;
};
class b: public base
{
float bar;
};
byte variant_id = 0; // 0 for class A, 1 for class B
std::variant< base, a, b > variant;
Вот как я использую вариант:
void func( )
{
auto& _variant = std::get< base >( variant ); // ideally would be = variant_id ? std::get< b >( variant ) : std::get< a >( variant )
_variant.foo = 20;
if ( variant_id == 1 )
{
auto& variant_ = std::get< b >( variant );
variant_.bar = 20.f;
}
else
{
auto& variant_ = std::get< a >( variant );
variant_.bar = 20;
}
Может быть, союз более эффективен?
union
{
a _a;
b _b;
} variant;
byte variant_id = 0;