Was haltet ihr hier von? #define TEMP template<class T>



  • Wer mag, schreibt explizite Klassentemplatespezialisierung.

    Meinst du generierte Klassentemplatespezialisierung? Die explizite hat doch hiermit nichts zu tun.


  • Mod

    Sone schrieb:

    Wer mag, schreibt explizite Klassentemplatespezialisierung.

    Meinst du generierte Klassentemplatespezialisierung? Die explizite hat doch hiermit nichts zu tun.

    Ich meine es genau so, wie ich es geschrieben habe.



  • also eine templateklasse ist für mich eine klasse von templates.

    sprich eine gewisse art von templates. was das ist steht auf einem anderen blatt (was wahrscheinlich noch gar nicht sauber geschrieben wurde)



  • camper schrieb:

    Jedenfalls ist eine Templateklasse etwas anderes als ein Klassentemplate. Ich würde es also begrüßen, wenn Kellerautomat entsprechend reflexartige - und dann tatsächlich sinnfreie - "Korrekturen" unterlässt.

    Nimmst du, wenn du einen Hasen zeichnen willst, eine Hasen-Schablone oder einen Schablonenhasen?
    Mich wuerde interessieren, was dann deiner Meinung nach eine "Templateklasse" ist.



  • Skym0sh0 schrieb:

    also eine templateklasse ist für mich eine klasse von templates.

    sprich eine gewisse art von templates. was das ist steht auf einem anderen blatt (was wahrscheinlich noch gar nicht sauber geschrieben wurde)

    Hmm, du hast Recht! Das ergibt Sinn. 👍


  • Mod

    Kellerautomat schrieb:

    camper schrieb:

    Jedenfalls ist eine Templateklasse etwas anderes als ein Klassentemplate. Ich würde es also begrüßen, wenn Kellerautomat entsprechend reflexartige - und dann tatsächlich sinnfreie - "Korrekturen" unterlässt.

    Nimmst du, wenn du einen Hasen zeichnen willst, eine Hasen-Schablone oder einen Schablonenhasen?
    Mich wuerde interessieren, was dann deiner Meinung nach eine "Templateklasse" ist.

    Die (Hasen-)Schablone wird benutzt, um einen (Schablonen-)Hasen zu zeichnen. Ganz einfach.

    Sone schrieb:

    Skym0sh0 schrieb:

    also eine templateklasse ist für mich eine klasse von templates.

    sprich eine gewisse art von templates. was das ist steht auf einem anderen blatt (was wahrscheinlich noch gar nicht sauber geschrieben wurde)

    Hmm, du hast Recht! Das ergibt Sinn. 👍

    Eine Templateklasse ist eine Klasse ganz in dem Sinne, wie C++ den Begriff Klasse versteht.
    Außerdem hat eine solche Klasse eine Template-id, ist also eine Spezialisierung eines (Klassen-)Templates. Und weil diese Spezialisierung alle Templateparameter bestimmt, handelt es sich um eine explizite (also vollständige) Spezialisierung.



  • Und weil diese Spezialisierung alle Templateparameter bestimmt, handelt es sich um eine explizite (also vollständige) Spezialisierung.

    ?
    Im Standard ist doch der Begriff explicit specialization deutlich definiert:

    An explicit specialization [...] can be declared by a declaration introduced by template<>; that is:
    explicit-specialization:
    template < > declaration

    Entweder ich habe völlig missverstanden was du überhaupt meinst, oder du hast dich falsch ausgedrückt.



  • @camper: Du meinst Instanzierungen?



  • vector<int> ist eine Template-Id. Und sobald irgendwo diese Template-Id als Klasse verwendet wird, generiert der Compiler eine Spezialisierung des entsprechenden Klassentemplates (daher auch der Name generierte ~) und die Template-ID repräsentiert dann diese generierte Klasse.


  • Mod

    Sone schrieb:

    Und weil diese Spezialisierung alle Templateparameter bestimmt, handelt es sich um eine explizite (also vollständige) Spezialisierung.

    ?
    Im Standard ist doch der Begriff explicit specialization deutlich definiert:

    An explicit specialization [...] can be declared by a declaration introduced by template<>; that is:
    explicit-specialization:
    template < > declaration

    Entweder ich habe völlig missverstanden was du überhaupt meinst, oder du hast dich falsch ausgedrückt.

    Möglicherweise hast du bemerkt, dass an der Stelle kursiver Text verwendet wird. Schau einfach mal in Kapitel 1.6 nach, was das bedeutet. Die Diskussion hier dreht sich schließlich nicht um syntaktische Katgeorien oder Produktionen.


  • Mod

    Sone schrieb:

    vector<int> ist eine Template-Id.

    richtig.

    Und sobald irgendwo diese Template-Id als Klasse verwendet wird,

    und dieser Kontekt die Existenz der Definition der Klasse erfordert (ODR) instantiiert der Compiler diese Klasse, sofern diese nicht zuvor bereits deklariert oder instantiiert wurde.
    Eine Instantiierung kann implizit oder explizit erfolgen und erzeugt die Klasse aus dem Primärtemplate oder der anzuwendenden partiellen Templatspezialisierung (eine partielle Spezialisierung ist ein Template). Das Resultat ist dann eine instantiierte Templateklasse bzw. eine instantiierte Templatefunktion.
    Eine explizite Spezialisierung kann auch deklariert werden, in diesem Falle wird sie gerade nicht instantiiert (sondern muss, sofern sie verwendet wird, auch (explizit) definiert werden).
    Eine explizite Spezialisierung ist kein Template.
    Kapitel 14.7 Template instantiation and specialization hat 3 Unterkapitel
    14.7.1 Implicit instantiation
    14.7.2 Explicit instantiation
    14.7.3 Explicit specialization
    das korrespondiert mit dem gesagten (wobei sich das letzte Kapitel um Deklarationen expliziter Spezialisierungen dreht, wie gleich der erste Satz deutlich macht.

    generiert der Compiler eine Spezialisierung des entsprechenden Klassentemplates (daher auch der Name generierte ~) und die Template-ID repräsentiert dann diese generierte Klasse.

    das stimmt im Prinzip, wenn generieren=instantiieren gemeint ist (s.o.)



  • Eine explizite Spezialisierung ist kein Template.

    Hat keiner gesagt. 😃

    Ja, ich sehe, ich hab da die Begrifflichkeiten durcheinander gebracht. Danke für die Klarstellung.

    P.S.: Ja, mit generieren war instantiieren gemeint.


Anmelden zum Antworten