v.which()
вернет основанный на 0 индекс типа объекта, который в настоящее время удерживается.
Когда вы извлекаете объект, ваш код должен использовать статический тип (для того, чтобы удовлетворить get<T>
шаблон функции) для ссылки на (эффективно) динамически типизированный объект.
Вам необходимо либо проверить тип (используя which()
или type()
) и выполнить ветвление соответственно, либо использовать статический посетитель.Независимо от того, какой путь вы выберете, вы должны явно указать статический тип, который вы хотите получить, и он должен соответствовать динамическому типу, иначе будет выдано исключение.
Одним из способов решения этой проблемы является вместо использованиятип варианта напрямую, используйте класс, который содержит тип варианта внутри, а затем определяет любые неявные операторы преобразования, необходимые для использования объекта с минимальной суетой.
У меня есть проект с именем Dynamic C ++ , которыйиспользует эту технику.