Mal was anderes
-
Hallo zusammen,
ich hoffe dass ich hier richtig bin.
Ich habe eine grundsätzliche "Machbarkeitsfrage":
Und zwar habe ich eine Klasse mit 4 Templateparametern
(Datentypen bzw. Klassen der FormTemplate<class T1, class T2, class T3, class T4>
class Handler{
...
}).
Mein Problem ist folgendes:
In meinem Fall gibt es für alle Kombinationen der möglichen Templateparameter
(Klassen) 180 mögliche Kombinationen, eine Handler - Klasse zu deklarieren.
Hinzukommt, dass die Datentypen der Templateparameter erst zur Laufzeit
bestimmt werden.
Ich müsste jetzt eine Handler - Klasse für jede Kombination fest im Quelltext
coden und zur Laufzeit entscheiden, welche genommen wird (abhängig von Usereingaben).
Meine konkrete Frage:
Gibt es eine Möglichkeit, evtl. mit einem Makro, eine bereits definierte Variable umzudefinieren, also praktisch ihren Datentyp zur Laufzeit zu ändern
(Beispielsweise von int auf double), um den Variablennamen nur einmal angeben zu müssen???Ich hoffe meine Frage ist halbwegs klar.
Beste Grüße,
Markus
-
Templates werden bereits zur Compilezeit für einen bestimmten Typ erzeugt und sind dann fest. Und auch eine Variable hat während ihrer gesamten Lebensdauer genau EINEN (statischen) Typ.
Von daher bist du, wenn es um Typänderungen zur Laufzeit geht, wohl an der falschen Stelle.Zwischenfrage: Was genau willst du letztendlich erreichen? WEnn wir mehr über dein Projekt wissen, können wir vielleicht Alternativen vorschlagen.
PS: Makros werden übrigens vom Präprozessor verarbeitet - der steht noch VOR dem Compiler.
-
Na ja,
ich habe eine GUI, in der der User zur Laufzeit verschiedene
Komponenten einer Software zur Bildregistrierung auswählen kann
(Art der Transformation, Interpolation, Metric, Optimierungsverfahren).
Diese Komponenten sind die Template-Parameter der beschriebenen
Handler - Klasse.
Wie bereits gesagt, ergeben sich 180 Möglichkeiten, die Komponenten
zu kombinieren (6 Optimierer, 3 Interpolationsverfahren, 4 Metriken usw.).
Zur Laufzeit entscheidet sich also, welche Verfahren kombiniert werden.
Je nachdem, wird dann eine Handler - Klasse mit den benötigten Parametern
definiert und erzeugt, dass müsste ich jetzt 180 mal machen.
Also dachte ich, versuch irgendwie den Datentyp zur Laufzeit festzulegen
(nach der Art
if (optimizerChoice = Simplex) typedef Simplex OptimizerType;
if (optimizerChoice = GradientDescent) typedef GradientDescent OptimizerType;
...
und das alles auch noch für Transformation, Metrik und Interpolation.
und am Ende wäre es schön, wenn man einfach dann den Handler damit
definieren und instantieren könnte:
Handler<class OptimizerType,class MetricType, class ...> handler;
Leider funktioniert das ja nicht.
Habe gehofft, es gäbe irgendeine Möglichkeit das mit einem Macro oder so
zu machen.Gruß,
Markus
-
Da würde sich die Verwendung einer gemeinsamen Basisklasse für verschiedene Optimierer, Algorithmen etc. mit den richtigen virtuellen Methoden eher anbieten als dein Template-Ansatz.
-
Das ist sicher richtig.
Das mit den Templates war wohl eine Sackgasse.
Würde zwar funktionieren wenn ich die 180 Möglichkeiten coden
würde, aber elegant wär's nicht.Vielen Dank,
Markus