2010-01-30 139 views
10

我正在使用boost變體來保存一些生成的類型,現在我的代碼生成器創建了一個包含類型和變量的頭文件。在初始化時,我想遍歷變體中的允許類型,而不是當前變體所持有的類型。遍歷boost :: variant類型

我可以使用變體嗎?

+0

遍歷類型做什麼? – 2010-01-30 13:11:29

+0

我需要填充一個地圖。 – swarfrat 2010-01-30 14:03:11

回答

19

boost::variant通過types這是一個MPL列表公開它的類型。您可以使用mpl::for_each對MPL列表執行運行時操作:

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 2011-01-04 05:42:03

+0

可能需要'boost :: mpl :: make_identity <>'當一些類型不是默認可構造的。 – TemplateRex 2017-06-15 10:52:45