Мы можем использовать get<i>(var)
для получения типа ith
boost::variant, где i
обычно является известной константой времени компиляции. Однако в некоторых случаях i
известно только во время выполнения. Например:
void do_process(int i, boost::variant<int, double, string>& var) {
// How can I get the underlying type of var based on i?
}
Цель здесь в том, что я реализую интерфейс сериализации/десериализации, а для сериализации я фактически могу использовать visitor
, потому что объект, который нужно сериализовать, известен. Для deserialization
похоже, что единственный способ, который я могу сделать, это извлечь данные из индекса типа (var.which()
) и сохранить данные в базовом типе.