Templates und Defines
-
Hi,
ich habe folgendes Problem.
Ich habe eine Template Klasse. Soweit ich weiß werden Templates ja
zur Compiletime aufgelöst. Gibt es eine Möglichkeit mit Defines auf die Templateparameter zu reagieren.Bsp:
template< bool B > class Foo { public: void foo(); } template< bool B > void Foo< B >::foo() { // Mache dies #if B // Mach noch dieses dazu #endif }Natürlich könnte ich B auch einfach mit einem
if( B )abfragen, aber die erste Variante würde bei B == False
keinen Overhead erzeugen.Ich hoffe es ist klar geworden was ich bewerkstelligen möchte.
Dies fände ich eleganter als Defines.mfg
-
lalalala schrieb:
Gibt es eine Möglichkeit mit Defines auf die Templateparameter zu reagieren.
Nein, da Präprozessoren *vor* den Templates aufgelöst werden.
Du kannst aber per Metaprogrammierung ein Compilezeit-'if' programmieren, indem Du ein Template spezialisierst. Schau Dir z.B. mal die Loki-Bibliothek oder die Metaprogramming-Bibliothek aus Boost an.
-
allerdings würde in diesem Fall
if(B) auch keinen Overhead produzieren, wenn B false ist. DAs kann der compiler rausoptimieren. Templates werden für jeden parameter neu geschrieben, d.h. der compiler erstellt bei benutzen des templates sowohl eine Funktion mit B==true und eine mit B==false, wenn du beide mindestens einmal benutzt.
-
Vielen Dank.

Viel zu oft vergesse ich, dass der Compiler auch noch optimiert.
