Friend Templates



  • Hallo,

    ich lese gerade im Josuttis über Friends bei Templates und bin dabei im Abschnitt 8.4.2 über folgenden Code gestoßen, den ich nicht verstehe:

    class Manager {
        ...
        template<typename T>
            friend int ticket() {
                return ++Manager::counter;
            }
        static int counter;
    };
    

    Mir ist nun unklar, für was diese Konstruktion gut sein soll. Man erhält hier doch eine Template-Funktion ticket(), die, egal mit welchem Template-Argument sie instanziert wird, immer dasselbe macht? Dann könnte man doch ticket() auch einfach als ordinäre (nicht-Template) Funktion definieren?



  • In soweit wie die Funktion nur mit einem Typen aufgerufen wird (int), macht es keinen Unterschied.



  • Es geht wohl eher darum, in einem Minimalbeispiel zu zeigen, wie ein friend template aussieht, auch wenn der friend in diesem speziellen Fall kein template sein müsste.



  • Also im Prinzip ein Fehler im Buch.



  • Da mag wohl einer das Buch nicht, was? 😉
    Minimalbeispiele, die nur die Syntax von irgendwas zeigen sollen, sind inhaltlich doch oft ziemlich sinnlos. Als Fehler würd ich ich das nicht bezeichnen, aber ok, >20000 vs. <100 Posts. 😃



  • Dobi schrieb:

    Da mag wohl einer das Buch nicht, was? 😉
    Minimalbeispiele, die nur die Syntax von irgendwas zeigen sollen, sind inhaltlich doch oft ziemlich sinnlos. Als Fehler würd ich ich das nicht bezeichnen, aber ok, >20000 vs. <100 Posts. 😃

    Und was zeigt dieses Beispiel? Dass das Anwenden einer Template-Funktion nicht zwangsläufig mehrere Templateklassen erstellt wie bei einer Klassentemplate? Falls ja, wurde das nicht gerade gut beschrieben, da OP davon kein Wort erwähnt hat. Ansonsten verwirrt dieses Beispiel mehr als dass es nutzt, lässt aber durchscheinen durch die Templatefunktion irgendwas Tolleres zu machen als es eine normale Funktion täte.

    Wenn der Autor nicht die Intention hat zu verwirren, wollte er vielleicht etwas anderes ausdrücken. Geht man davon aus, ist dieses Beispiel fehlerhaft, da es nichts Weltbewegendes tut.


Log in to reply