Получить базовый тип boost::variant

Мы можем использовать 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()) и сохранить данные в базовом типе.


person Jes    schedule 11.07.2016    source источник
comment
Как насчет этого подхода? stackoverflow.com/questions/9313108/   -  person Takatoshi Kondo    schedule 12.07.2016