Wählen Sie das Template-Argument zur Laufzeit in C ++

8

Angenommen, ich verfüge über eine Reihe von Funktionen und Klassen, für die die Verwendung einer einzelnen ( float ) oder double Genauigkeit vorgesehen ist. Natürlich könnte ich nur zwei Teile Bootstrap-Code schreiben, oder Chaos mit Makros. Aber kann ich einfach das Template-Argument zur Laufzeit wechseln?

    
Andrew T 03.03.2009, 22:04
quelle

3 Antworten

19

Nein, Sie können Vorlagenargumente nicht zur Laufzeit wechseln, da Vorlagen vom Compiler zur Kompilierungszeit instanziiert werden. Was Sie können tun, ist, dass beide Vorlagen von einer gemeinsamen Basisklasse abgeleitet werden, verwenden Sie immer die Basisklasse in Ihrem Code und entscheiden Sie dann, welche abgeleitete Klasse zur Laufzeit verwendet werden soll:

%Vor%

Makros haben das gleiche Problem wie Vorlagen, da sie zur Kompilierzeit erweitert werden.

    
Adam Rosenfield 03.03.2009, 22:10
quelle
3

Vorlagen sind ein Mechanismus zur Kompilierung. BTW, Makros sind auch (streng genommen - ein Vorverarbeitungsmechanismus - der sogar vor der Kompilierung kommt).

    
Nemanja Trifunovic 03.03.2009 22:07
quelle
2

Vorlagen sind reine Kompilierzeitkonstrukte, der Compiler erweitert eine Vorlage und erstellt Ihre Klasse / Funktion mit dem angegebenen Argument und übersetzt diese direkt in Code.

Wenn Sie versuchen, zur Laufzeit zwischen foo<float> und foo<double> zu wechseln, müssen Sie entweder einige Metaprogrammierungs-Tricks verwenden oder für jedes einzelne Programm separate Code-Pfade verwenden.

    
Ron Warholic 03.03.2009 22:11
quelle

Tags und Links