Как использовать варианты std :: более «вкусно», синтаксис?C++

Программы на C++. Форум разработчиков
Anonymous
Как использовать варианты std :: более «вкусно», синтаксис?

Сообщение Anonymous »

Это мотивировано ответом, который я дал новичкому пользователю, где я предложил, чтобы он использовал std :: variant вместо союза.

Код: Выделить всё

struct Box {
struct Item { float value; };
using Boxes = std::vector;

union Value {
Item item;
Boxes boxes;
};

Value contents;
std::string label;
};
< /code>
(не совсем то, что имел оригинальный вопрос, я получаю здесь какую -то поэтическую лицензию.) И с вариантом класс может выглядеть так: < /p>
struct Box {
struct Item { float value; };
using Boxes = std::vector;

std::variant contents;
std::string label;
};
< /code>
Дело в том, что с первой формулировкой этой структуры я могу написать < /p>
if (box.contents.boxes.size() > 2) { foo(); }
и при условии, что я уже установил, что будут подборы, это будет работать.

Код: Выделить всё

if (std::get(box.contents).size() > 2) { foo(); }
< /code>
Я чувствую, что вторая версия гораздо менее читаема, немного запутанна и довольно отвлекает. Плюс - я должен знать тип коробок 
.
Что я могу сделать в своем коде, чтобы избавить своих пользователей необходимостью сделать такого рода std :: get () и сделать их жизнь более приятными?

Подробнее здесь: https://stackoverflow.com/questions/623 ... yntax-wise

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