wie man die Anzahl der Typen erhöht, die mit boost :: variant behandelt werden können

9

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,

    
shengyushen 10.01.2016, 06:05
quelle

2 Antworten

8

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.

Laufen auf Coliru

    
llonesmiz 10.01.2016, 07:45
quelle
0

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).

    
Aleph0 06.04.2017 10:42
quelle

Tags und Links