C ++ эквивалент перечислений ржавчиныC++

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

Сообщение Anonymous »

В этом примере показан элегантный способ справиться с сообщениями разных типов в ржавчине. Он имеет 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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