В этом примере показан элегантный способ справиться с сообщениями разных типов в ржавчине. Он имеет 4 варианта, и в некоторых вариантах есть субъекты, которые доступны только в том случае, если перечисление имеет этот конкретный тип. Аналогичный шаблон также возможен в TypeScript. < /P>
Код: Выделить всё
enum Message {
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
< /code>
в 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;
};
Тем не менее, этот способ не Typesafe, и управление памятью станет грязным (например, убедиться, что строка будет выпущена, если сообщение будет разрушено, если MessageType - это написать ). Как лучше всего сделать это в современном C ++?
Подробнее здесь:
https://stackoverflow.com/questions/640 ... rust-enums