Template funkion in einer Klasse



  • Morgen,

    Ist es eigentlich möglich, in einer Klasse eine Template Funktion
    zu definieren?

    Also etwa so:

    class test
    {
      private:
       /* ... */
    
      public:
        template<class T> add(T &arg);
    };
    


  • Ja.



  • Laut Standard ist es erlaubt, allerdings unterstützt es noch nicht jeder Compiler.


  • Mod

    CStoll schrieb:

    Laut Standard ist es erlaubt, allerdings unterstützt es noch nicht jeder Compiler.

    Das klingt aber sehr negativ. Sagen wir besser, dass das von Steinzeitcompilern nicht unterstützt wird. 🙂



  • Schon mal ausprobiert ?

    Meiner Erfahrung nach geht das ...

    BTW: Es ist bisweilen hilfreicher, von einem Funktionstemplate zu sprechen und nicht von einer Templatefunktion.... 😃

    BTW2: Erstmal sieht das furchtbar klasse flexibel aus ... aber im Detail hat man eher selten (außerhalb von Klassentemplates) einen echten Vorteil gegenübernormalen overloads.

    Gruß,

    Simon2.



  • Simon2 schrieb:

    BTW2: Erstmal sieht das furchtbar klasse flexibel aus ... aber im Detail hat man eher selten (außerhalb von Klassentemplates) einen echten Vorteil gegenübernormalen overloads.

    Sehe ich auch so.
    Aber in meinem Fall müsste ich 8 overloads machen. Und alle 8 hätten
    genau den gleichen code 😉



  • xGhost schrieb:

    ...Aber in meinem Fall müsste ich 8 overloads machen. Und alle 8 hätten
    genau den gleichen code 😉

    OK, für 8 overloads mit identischem code lohnt sich das schon .... und das klingt auch nach einem der oben schon angedeuteten Ausnahmefälle - oder eben darauf, dass man das besser designen könnte 😉
    (mal ein Tipp: Anhängen an einen internen String oder Eintragen in einen string-Container ?)

    Gruß,

    Simon2.



  • Das war jetzt wirklich nur Beispiel Code.

    In Wirklichkeit programmiere ich eine boost::format Variante
    für UTF-8 Strings. Und überlade den % operator.

    Gruss,
    Ghost

    // Edit
    Da ich alle arten von Zahlen (mein Programm hat 😎 immer gleich
    Casten müsste, gibt es halt den selben Code.



  • xGhost schrieb:

    ...Strings...

    wusste ich's doch 😃

    ich vermute aber, dass Du damit eigentlich auch nur einen anderen Satz an overloads (oder Funktionstemplates) maskierst - nämlich den, der die eigentlich Umwandlung übernimmt. Wie gesagt: Kann sinnvoll sein ... kann aber auch nur ein Beispiel für "ich reibe meinen Geruch an ein fremdes Ding" sein 😉

    Gruß,

    Simon2.


Anmelden zum Antworten