Предположим, у меня есть Shape
базовый класс и Circle
, Line
и Point
производные классы.У меня есть две функции.
std::variant<Circle, Line, Point> process(const Shape &s);
Shape process(const Shape& s);
Я могу передать любой из моих производных классов и вернуть объект Shape во второй функции, вариант - это просто объединение, которое может содержать любую из моих переменных производного класса в любойзаданное время.
Теперь с std::variant
я также могу использовать visitor
, где я могу обработать некоторую функцию в зависимости от того, какой тип содержит мой вариант (я мог бы просто создать объект функции и передать его std::transform
и применить его к каждому из моих объектов).Тем не менее, я могу просто сделать эту функцию virtual
в своем базовом классе и сделать так, чтобы каждый производный класс ее реализовывал.
Итак, variant
просто удобство?