#c #boost-variant
Вопрос:
Я использую два разных варианта, в которых один может содержать больше типов, чем другой.
typedef std::variant<boost::blank, double> EmptyDouble;
typedef std::variant<boost::blank, double, int> EmptyDoubleOrInt;
Теперь я хочу использовать функцию, имеющую EmptyDoubleOrInt в качестве параметра. Эта функция отлично работает для целого числа, двойного или пустого, но не для типа EmptyDouble:
SomeFunction(EmptyDoubleOrInt input);
Как я могу преобразовать EmptyDouble в пробел или double, не зная, какой у него тип. Значит, это будет правильный ввод для функции?
SomeFunction(DoSomething(emptyDouble))
Ответ №1:
Вы можете использовать std::visit
для построения EmptyDoubleOrInt
из emptyDouble
:
SomeFunction(std::visit([](const autoamp; a) -> EmptyDoubleOrInt {
return a;
}, emptyDouble));
Комментарии:
1. хорошей практикой является перенос таких вещей во вспомогательные функции: godbolt.org/z/G9vxYjK5M