С++-эквивалент перечислений Rust ⇐ C++

Программы на C++. Форум разработчиков
Anonymous
С++-эквивалент перечислений Rust

Сообщение Anonymous »

Этот пример демонстрирует элегантный способ работы с сообщениями разных типов в 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

Вернуться в «C++»