2010-01-30 3 views
10

Я использую вариант boost для хранения некоторых сгенерированных типов, прямо сейчас мой генератор кода создает заголовок с типами и вариантами, способными их удерживать. Во время инициализации я хотел бы перебирать допустимые типы в варианте, а не типы, которые данный вариант держит в данный момент.Итерация по типам в boost :: variant

Могу ли я сделать это с вариантом?

+0

Итерации по типам для чего? –

+0

Мне нужно заполнить карту . – swarfrat

ответ

19

boost::variant раскрывает свои типы через types, который является списком MPL. Вы можете выполнять операции во время выполнения списков MPL с помощью mpl::for_each:

struct printer { 
    template<class T> void operator()(T t) { 
     std::cout << typeid(T).name() << std::endl; 
    } 
}; 

// ... 
typedef boost::variant<int, char> var; 
boost::mpl::for_each<var::types>(printer()); 
+0

Ты полезный парень. Спасибо =] – taxilian

+0

может понадобиться 'boost :: mpl :: make_identity <>', если некоторые из типов не являются конструктивными по умолчанию. – TemplateRex