Ich entwerfe einen Parser für Verilog-Sprache, und eine der Regel haben 25 Komponenten, die ich brauche eine große boost :: Variante, um es zu halten:wie man die Anzahl der Typen erhöht, die boost :: variant behandeln kann
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 ;
Aber g ++ beschweren, dass die boost :: Variante nur nicht mehr als 20 Arten halten kann.
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;
ich versuche BOOST_VARIANT_LIMIT_TYPES zu größerem Wert neu zu definieren:
#define BOOST_VARIANT_LIMIT_TYPES 30
#include<boost/variant.hpp>
Aber der Fehler ist immer noch da,
Ich habe dieses bei der Suche nach Antwort gelesen, aber ich finde es ist von MPL, nicht Variante. Aber trotzdem funktioniert es, vielen Dank. – shengyushen
Aber Kompilierung verlangsamt sich erheblich, irgendein Vorschlag? – shengyushen
Ich habe keine Erfahrung damit, aber ich denke, [diese Frage] (http://stackoverflow.com/q/19493630/2417774) könnte helfen. Leider kann ich es erst heute Abend testen (ab 12 Stunden). Ein anderer möglicher Vorschlag könnte sein, zu versuchen, die Variante zu vereinfachen, zum Beispiel mit geschachtelten 'Deklaration'-, 'Instanziierungs'- und' Konstrukt'-Varianten, wenn sie in Ihrem Modell sinnvoll sind. – llonesmiz