Ich entwerfe einen Parser für die Verilog-Sprache, und eine der Regeln hat 25 Komponenten, für die ich eine große boost :: -Variante brauche:
%Vor%Aber g ++ beschweren sich, dass die boost :: Variante nicht mehr als 20 Typen enthalten kann.
%Vor%Ich versuche, BOOST_VARIANT_LIMIT_TYPES zu einem größeren Wert neu zu definieren:
%Vor%Aber der Fehler ist immer noch da,
Die Fehler in clang ++ und g ++ im C ++ 98 Modus (was Sie zu haben scheinen) sind ziemlich kurz (und leider nutzlos). In c ++ 11 ist der Fehler viel größer und zeigt das Schlüsselproblem:
Fehler: zu viele Vorlagenargumente für Klassenvorlage 'Liste'
typedef typenname mpl :: list & lt; T ... & gt; :: Typ eingeben;
Wenn Sie in der Boost.MPL-Dokumentation nachsehen, können Sie das tun sehen Sie, dass Sie hinzufügen müssen:
%Vor%Sie können die Liste standardmäßig nur auf die Größe 30, 40 oder 50 setzen. Wenn Sie mehr möchten, müssen Sie benutzerdefinierte Header generieren.
Ich stolperte auch über das gleiche Problem. Leider kann ich die obige Lösung nicht verwenden, da ich von anderen Bibliotheken abhängig bin, die bereits boost-variant
mit #define BOOST_MPL_LIMIT_LIST_SIZE 20
verwenden. Das erneute Kompilieren der boost-variant
Bibliotheken ist ebenfalls keine erwünschte Lösung für mich.
Daher habe ich einen Workaround für mein Problem entwickelt. Der folgende Code veranschaulicht die Idee dieser Problemumgehung mit 39 Typen.
%Vor% Die Lösung erstellt nur eine Liste von boost-variant
-Typen (ähnlich einer linearen Liste).
Tags und Links c++ boost boost-variant variant