C
#include <stdio.h>
typedef struct {
enum { RETANGULO, QUADRADO, CIRCULO } tipo;
union {
struct { float altura, largura; } retangulo;
struct { float lado; } quadrado;
struct { float raio; } circulo;
};
} FiguraGeometrica;
int main() {
FiguraGeometrica fig = {
.tipo = QUADRADO,
.quadrado = { .lado = 2.0 }
};
printf("%.2f\n", fig.quadrado.lado);
}
C++17
#include <iostream>
#include <variant>
struct Retangulo { int largura, altura; };
struct Quadrado { int lado; };
struct Circulo { int raio; };
using FiguraGeometrica = std::variant<
Retangulo, Quadrado, Circulo
>;
int main() {
auto fig = FiguraGeometrica {
Retangulo { .largura = 10, .altura = 20 }
};
std::cout
<< "largura: "
<< std::get<Retangulo>(fig).largura
<< std::endl;
}