我正在設計一個verilog語言的解析器,其中一個規則有25個組件,我需要一個大的boost :: variant來保存它:如何增加boost :: variant可以處理的類型的數量
typedef boost::variant<
shared_ptr<T_module_item__port_declaration>
, shared_ptr<T_module_item__generate_region>
, shared_ptr<T_module_item__specify_block>
, shared_ptr<T_module_item__parameter_declaration>
, shared_ptr<T_module_item__specparam_declaration>
, shared_ptr<T_module_item__net_declaration>
, shared_ptr<T_module_item__reg_declaration>
, shared_ptr<T_module_item__integer_declaration>
, shared_ptr<T_module_item__real_declaration>
, shared_ptr<T_module_item__time_declaration>
, shared_ptr<T_module_item__realtime_declaration>
, shared_ptr<T_module_item__event_declaration>
, shared_ptr<T_module_item__genvar_declaration>
, shared_ptr<T_module_item__task_declaration>
, shared_ptr<T_module_item__function_declaration>
, shared_ptr<T_module_item__local_parameter_declaration>
, shared_ptr<T_module_item__parameter_override>
, shared_ptr<T_module_item__continuous_assign>
, shared_ptr<T_module_item__gate_instantiation>
, shared_ptr<T_module_item__udp_instantiation>
, shared_ptr<T_module_item__module_instantiation>
, shared_ptr<T_module_item__initial_construct>
, shared_ptr<T_module_item__always_construct>
, shared_ptr<T_module_item__loop_generate_construct>
, shared_ptr<T_module_item__conditional_generate_construct>
> module_item ;
但g ++抱怨boost :: variant只能容納不超過20種類型。
verilogast.h|1129 col 2| error: wrong number of template arguments (25, should be 20)
|| > module_item ;
|| ^
/usr/include/boost/variant/variant_fwd.hpp|213 col 53| error: provided for ‘template<class T0, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class T11, class T12, class T13, class T14, class T15, class T16, class T17, class T18, class T19> class boost::variant’
|| template <BOOST_VARIANT_AUX_DECLARE_PARAMS> class variant;
我試圖重新定義BOOST_VARIANT_LIMIT_TYPES較大值:
#define BOOST_VARIANT_LIMIT_TYPES 30
#include<boost/variant.hpp>
但錯誤仍然存在,
我在搜索答案時已經閱讀過這篇文章,但是我發現它來自mpl,而不是變體。但無論如何,它的工作原理非常感謝。 – shengyushen
但編譯顯着減慢,有什麼建議? – shengyushen
我對此沒有經驗,但我認爲[這個問題](http://stackoverflow.com/q/19493630/2417774)可能會有所幫助。不幸的是我直到今晚才能測試它(從現在開始超過12小時)。另一個可能的建議是嘗試簡化變體,例如,如果它們在模型中有意義,則使用嵌套的'declaration','instantiation'和'construct'變體。 – llonesmiz