Explicit Instantiation



  • int main()
    {
        char ch1 = 'a';
        char ch2 = 'b';
        Swap(ch1, ch2);
    }
    

    Suchst Du das?



  • @BasicMan01
    Im Primer steht die Zeile
    template void Swap<char>( char &, char & )
    genau so in der main drin.

    Es soll eine explizitie Spezialisierung sein für die Templatefunktion. Im Prinzip ist mein Beispiel genau das gleiche wie im Primer. Ich habe nur eine Spezialisierung mehr.

    @Theta
    Nein, es soll eine explizite Spezialisierung definieren. Gemäss dem Primer müsste das möglich sein.

    Es steht im Primer in Kapitel 8. S. 381 falls das jemandem hilft.

    *Edit
    @ Theta
    In deinem Beispiel wird ja implizit das Template für char definiert. Ich möchte das nun jedoch auch explizit machen können. Kann es sein, dass Visual Studio 2010 das nicht unterstützt?



  • Ich nehme dann mal an, dass es sich entweder um einen Fehler im Buch handelt oder, wenn niemandem dieses Konstrukt bekannt vorkommt, dass es völlig unwichtig ist 🙂



  • icarus2 schrieb:

    Aber im Primer steht fast ein identisches Beispiel.

    Betonung auf "fast identisch".



  • Fall jemand nachlesen möchte - das steht nicht im Primer von Lippman&Moo, sondern im C++ Primer Plus von Prata.



  • Ja, fast identisch. Nur sehe ich den wesentlichen Unterschied nicht ^^ Ich verstehe nicht was in meinem Beispiel nicht geht. Ich wers nochmal durchlesen und drüber nachdenken ^^

    Jo sry, hätte sagen müssen, dass es der C++ Primer Plus von Prata ist 🙄



  • icarus2 schrieb:

    Ja, fast identisch. Nur sehe ich den wesentlichen Unterschied nicht ^^ Ich verstehe nicht was in meinem Beispiel nicht geht.

    Die Fehlermeldung sagt es dir ja bereits. Eine explizite Instanzierung gehört in den globalen, namespace oder class scope. Und nicht in den scope einer Funktion. Ist ja auch nichts laufzeitrelevantes. Warum sollte es dann in eine Funktion rein?

    template void Swap<char>( char &, char & ); // ok
    
    int main()
    {
        char ch1 = 'a';
        char ch2 = 'b';
    
    }
    

    Und schon gehts.
    Wenn das Buch etwas anderes sagt ist es sehr wahrscheinlich (ich hab jetzt nicht im Standard nachgeschaut) falsch.



  • Ja, ich nehme dann mal an, dass es ein Fehler im Buch ist. Ist onehin merkwürdig, ich wusste gar nicht was das überhaupt genau bewirken soll. Weil ich es nicht verstanden habe habe ich es dann mal ausprobiert.

    Danke für eure Antworten.



  • icarus2 schrieb:

    Ja, ich nehme dann mal an, dass es ein Fehler im Buch ist. Ist onehin merkwürdig, ich wusste gar nicht was das überhaupt genau bewirken soll.

    Es soll Kompilierungszeiten und Code Generierung optimieren.



  • Achso, danke. Das steht hier im Buch nicht.


Anmelden zum Antworten