C ++ - Array-Unterschriften-Operatorvorlage

8

Nachdem ich versucht habe, den Zugriff auf eine Speicherklasse etwas einfacher zu machen, bin ich in eine Situation geraten, über die ich nicht viel weiß. Und es ist nicht einfach, Menschen zu finden, die versuchen, dasselbe zu tun wie ich.

Was ich versuche zu tun, ist eine Klasse zu haben, die intern ein Array von Werten als Strings speichert, aber ein einfaches Casting vom Benutzer erlaubt. Was ich geplant hatte, ist die Verwendung des Array-Subscript-Operators, um den Typ zurückzugeben, den sie in einer Vorlage angeben. Obwohl es viel besser klingt, als es in der Praxis funktioniert. Hier ist ein einfaches Beispiel, was ich mache, um Ihnen eine Vorstellung davon zu geben, wie es funktionieren sollte

%Vor%

Von dort würde ich ein paar spezifische Vorlagen definieren, und jeder Benutzer könnte sehr einfach mehr definieren, wenn nötig. Aber das größte Problem dabei ist, dass ich nicht weiß, wie man den Subscript-Operator mit einer Vorlage aufruft. Zuerst nahm ich folgendes an (was offensichtlich nicht korrekt ist), wenn man bedenkt, dass es ähnlich wie die Standardmethode ist, eine Template-Methode aufzurufen.

%Vor%

Kennt jemand den richtigen Weg, den Subscript-Operator als Vorlage zu bezeichnen? Oder sollte ich es einfach vermeiden und eine benannte Methode verwenden?

    
TheCodeBroski 31.03.2012, 17:07
quelle

2 Antworten

10

Sie können Ihren Operator nur aufrufen, indem Sie list.operator[]<T>() explizit schreiben.

Es gibt zwei grundlegende Möglichkeiten:

  1. Schreiben Sie eine Funktionsvorlage wie list.get<int>() (wie von templatetypedef vorgeschlagen)
  2. Gibt einen Proxy mit automatischer Konversation an T zurück.

Der Code würde wie folgt aussehen:

%Vor%     
ipc 31.03.2012, 17:17
quelle
4

Ich denke, es gibt keine Syntax, um Template-Parameter an den natürlichen Aufruf von operator [] zu übergeben. Sie müssten wahrscheinlich anrufen:

%Vor%

Wie Sie es mit normalen Template-Funktionen tun, ist es sinnlos, hier eine Operator-Überladung zu verwenden.

    
lvella 31.03.2012 17:19
quelle