Überladen des Operators in der Vorlage in C ++

8

Ich habe folgenden Code von irgendwo gelesen:

%Vor%

Was bedeutet die untere Zeile?

  

operator T () const {return a;}

    
Bill Li 23.08.2011, 15:42
quelle

3 Antworten

4
  

operator T () const {return a;}

Dies ist der Typcast-Operator . Es konvertiert die Klasseninstanz implizit in T . In dem von Ihnen geposteten Beispielcode wird diese Konvertierung in der Zeile

ausgeführt
  

int n = a;

    
Praetorian 23.08.2011, 15:55
quelle
3

Wenn Sie eine Instanz in ein T konvertieren möchten, können Sie diesen Operator verwenden, der hier eine Kopie des privaten Members zurückgibt.

In Ihrem Beispielcode können Sie a , das vom Typ A<int> ist, direkt einem int zuweisen. Versuchen Sie, operator T() zu entfernen und sehen Sie, wie das Kompilieren fehlschlägt, wenn Sie A<T> einem int zuordnen.

Mit dem Konstruktor non explicit (das Gegenteil des Kennzeichens eines Konstruktors explicit ) wird dieser Typ in einer Reihe von Fällen auch dem Schablonentyp selbst sehr ähnlich. In der Tat haben Sie eine T in eine andere Klasse eingepackt, die sich bei Bedarf wie ein T verhält. Sie könnten dies erweitern, um andere, nützlichere Dinge wie das Überwachen / Protokollieren / Beschränken der Verwendung von realen Instanzen zu tun, indem Sie sie hinter etwas verstecken, das sie kontrolliert.

Beachten Sie auch, dass Sie A<int> a = A<int>(5); wegen des impliziten Konstruktors einfach in A<int> a = 5; ändern können.

    
Flexo 23.08.2011 15:46
quelle
-5

Es macht im Grunde einen Funktor - was ein Objekt mit Funktionssemantik ist. Das heißt, Sie können das Objekt genau wie eine Funktion als Ersatz an Stellen bezeichnen, an denen Sie möglicherweise eine Funktion verwendet haben - es ist ein generisches Programmierkonzept.

Es ist vorteilhaft, weil Sie mehrere Instanzen dieses Funktionsobjekts (Funktor) haben können und jeder seinen eigenen Zustand beibehalten kann, in dem Sie, wie wenn Sie eine Straight-Up-Funktion hätten, den Zustand nur über statische Variablen aufrechterhalten könnte wäre also nicht einspringend (man bekommt immer nur eine Instanz einer statischen Variable).

Funktoren werden in STL-Algorithmen als zusätzlicher optionaler Parameter stark verwendet.

    
John Humphreys - w00te 23.08.2011 15:46
quelle

Tags und Links