So definieren Sie heterogene std :: map mit boost :: variant in "zweidimensionaler Weise"

9

Ich würde mich freuen, zu erfahren, wie man mit boost :: variant in "zweidimensionaler Manier" umgeht. Klingt komisch, aber lassen Sie meinen Code mehr (hoffentlich) sagen:

Ich habe eine Klasse namens Parameter:

programmiert %Vor%

Beispiel Verwendung meines Parameters wie oben definiert:

%Vor%

Wie ich oben anhand des Beispiels erklären wollte, kann ich mehrere Parametertypen mit boost::units::si::??? und einem anderen Datentyp wie double, short, int etc.

definieren

Mein ZIEL besteht darin, einen std::map -Container zu erstellen, der Instanzen eines beliebigen Typs Parameter (wie oben abgetastet) speichern kann.

Deshalb habe ich erklärt:

%Vor%

Das funktioniert ziemlich gut, aber ich habe einen großen Nachteil, den ich gerne lösen würde - ich muss jede einzelne Kombination von Parametertypen definieren, die ich in SupportedParameterTypes type wie oben definiert unterstützen möchte.

Meine Idee war, boost :: mpl :: vector zu definieren, das alle Parametertypen enthält, die ich unterstützen möchte:

%Vor%

Und alle möglichen Datentypen werden unterstützt:

%Vor%

Da kommen meine Probleme:

%Vor%

Aber boost::variant von etwas ( Parameter ) zu definieren, das von einem anderen boost::variant definiert wird, scheint nicht zu funktionieren: o (

FRAGE : Wie definiere ich std::map container, der alle meine Parameter -Typen enthält, die in den entsprechenden boost::mpl::vector s definiert sind?

Ich würde Sie gerne um Hilfe bei der Lösung dieses Problems bitten. Vielleicht ist es keine gute Idee / Prinzip überhaupt, es zu kodieren, wie ich schrieb, wer weiß. Mein Ziel ist es, durch std :: map einen flexiblen Speicher zu haben, um alle meine Parameter zu halten, ohne dass mein Code mehrdeutig ist. Auf der Suche nach cleverer Lösung natürlich: o)

Vielen Dank im Voraus für eine Antwort auf meine Frage / Bitte um Hilfe

    
Martin Kopecký 14.12.2015, 09:24
quelle

1 Antwort

3

Sie können Ihre gesamte Paarung mit etwas wie

erstellen %Vor%

Und dann benutze es als

%Vor%

Demo

    
Jarod42 14.12.2015 10:40
quelle