Sto progettando un parser per il linguaggio verilog, e una delle regole ha 25 componenti, che ho bisogno di un grande boost :: variante per tenerlo:come aumentare il numero di tipi che possono essere gestiti da boost :: variante
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 ;
Ma g ++ si lamenta che la variante boost :: non può contenere più di 20 tipi.
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;
ho cerca di ridefinire BOOST_VARIANT_LIMIT_TYPES al valore maggiore:
#define BOOST_VARIANT_LIMIT_TYPES 30
#include<boost/variant.hpp>
Ma l'errore è ancora lì,
Ho letto questo quando cerco la risposta, ma trovo che è da mpl, non da variante. Ma comunque, funziona, grazie mille. – shengyushen
Ma la compilazione rallenta in modo significativo, qualche suggerimento? – shengyushen
Non ho esperienza con questo, ma penso che [questa domanda] (http://stackoverflow.com/q/19493630/2417774) potrebbe aiutare. Sfortunatamente non sarò in grado di testarlo fino a stasera (oltre 12 ore da ora). Un altro possibile suggerimento potrebbe essere quello di provare a semplificare la variante, ad esempio usando nested 'declaration',' instantiation' e 'construct' varianti se hanno senso nel modello. – llonesmiz