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


Anmelden zum Antworten