[Templates] typename / class



  • Hi,
    in welchen Situationen nimmt bei Templates typename und wann class?



  • meinst du

    template <class X, typename Y>
    class foo { /* ... */ };
    

    oder

    template <class X>
    class Y { typedef typename X::cool_type my_cool_type; };
    

    beim ersten ist es total egal. nimm class, ist kürzer zu schreiben.
    allerdings "hört" sich typename richtiger an (imo)
    beim zweiten wirst du mit class wenig erfolg haben.



  • es soll leute geben die class benutzen wenn keine buildins werden sollte und typename wenn buildins auch erlaubt sind, naürlich geschiet das auf programmierer ebene, der compilier macht da kein unterschied

    ich benutze typename weil:
    als ich templates kennen lernte hatt mich class sehr verwirt (ich übergebe den dinsda doch ein double/int, seid wann ist double eine class?)



  • davie schrieb:

    template <class X>
    class Y { typedef typename X::cool_type my_cool_type; };
    

    Warum brauch man hier überhaupt ein typename? Ich hab schon in mehreren Büchern geguckt und nichts darüber gefunden. Weiß jemand wo es Informationen darüber gibt? Ich würde das gerne verstehen. 🙄



  • Gerard schrieb:

    es soll leute geben die class benutzen wenn keine buildins werden sollte und typename wenn buildins auch erlaubt sind, naürlich geschiet das auf programmierer ebene, der compilier macht da kein unterschied

    jo, ich mach das so. Auch wenn das nicht wirklich Sinn macht, da so etwas ja eh in der Doku steht. Aber es bringt ja keinen Nachteil mit sich 🙂

    @:-)
    man brauch typename, weil der Compiler bei X::cool_type nicht wissen kann, dass es sich um einen Typ handelt, da X ein Template-Parameter ist



  • Mir ist nicht klar, warum ein Compiler unfaehig sein soll, zu erkennen,
    dass X::cool_type ein Typ ist.



  • Er kann theoretisch schon, aber erst, wenn er das Template instanziiert. Er würde aber gern vorher schon, wenn er das Template einliest, wissen, was ein Typ ist und was nicht.


Anmelden zum Antworten