Announcement

Collapse
No announcement yet.

typedef für Template-Funktionen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • typedef für Template-Funktionen

    Hallo,

    wenn ich eine Template-Klasse habe, z.B.

    Code:
    template<class T>
    class A{
    public:
      T val;
    };
    dann kann ich, wenn ich mir die ständigen spitzen Klammern sparen möchte ja typedefs definieren, wie bspw.
    Code:
    typedef A<int> Ai;
    typedef A<float> Af;
    Kann ich sowas auch irgendwie für Funktionen machen?
    Also gegeben eine Funktion
    Code:
    template<class T>
    T doIt(T in);
    Kann ich da irgendwie etwas ähnliches wie bei der Klasse machen um mir die Schreibarbeit zu ersparen?
    Code:
    typedef int doIt<int>(int in) int doItInt(int in);
    funktioniert leider nicht.

  • #2
    Meine bisherige Lösung wäre eine kleine Inline Funktion zu schreiben.

    Code:
    inline int doItInt(int i){
      return doIt<int>(i);
    }
    Aber gibts da noch etwas besseres vielleicht?

    Comment


    • #3
      Auch wenn die Frage schon etwas älter ist wollte ich dennoch einen Hinweis geben. Bei Funktionen (egal ob einfache Funktion oder Memberfunktion) wird der Typ zur Compiletime aufgelöst, d.h.: wenn Du doIt(1); aufrufst wird in Deinem Beispiel, grob gesagt, T mit int ersetzt. Das macht der Compiler für Dich, brauchst Du Dich gar nicht mehr drum kümmern.

      Allerdings ist Dein Beispiel für eine bessere Erklärung etwas ungeeignet. Denn so richtig auffallen wird es Dir wenn Du eine Funktion hast die 2 Parameter vom gleichen Typ erwartet:
      Code:
      template< typename TypeT >
      bool max(TypeT const& a, TypeT const& b)
      { return (a > b) ? a : b; }
      
      // später im Code.
      max(1, 2); // Ok.
      max(1, 2.0f); // Falsch! 2 Parameter unterschiedlichen Typs.
      Gut Schuß
      VuuRWerK

      Comment

      Working...
      X