Этот пример демонстрирует элегантный способ работы с сообщениями разных типов в Rust. Он имеет 4 варианта, а некоторые варианты имеют подчлены, которые доступны только в том случае, если перечисление относится к этому конкретному типу. Аналогичный шаблон возможен и в TypeScript.
Код: Выделить всё
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
В C++ это, скорее всего, можно сравнить со следующим кодом.
Код: Выделить всё
struct Message
{
enum MessageType {QUIT, MOVE, WRITE, CHANGECOLOR} type;
union MessageContent
{
struct Move { int x; int y;} move;
std::string write;
std::tuple changeColor;
} content;
};
Однако этот способ не является типобезопасным, и управление памятью станет беспорядочным (например, проверка того, что строка освобождается, если Message уничтожается, если MessageType имеет значение ПИШИТЕ). Как лучше всего это сделать в современном C++?
Подробнее здесь:
https://stackoverflow.com/questions/640 ... rust-enums