C++ [] Operator

  • C++

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Gonger96.

    C++ [] Operator

    Hi,

    ich möchte den [] Operator meiner Klasse überladen um bestimmte Parameter zu setzen z.B:

    C-Quellcode

    1. ​clazz["Test"] = 12;


    dafür hab ich folgendes geschrieben:

    C-Quellcode

    1. int* clazz::operator[](const char* parameter)
    2. {
    3. return &blaa...;
    4. }


    Jetzt möchte ich aber dort eine andere Methode aufrufen, aber die Werte sind logischerweise noch nicht verfügbar. Ist sowas irgendwie möglich?
    In diesem Satz:
    Jetzt möchte ich aber dort eine andere Methode aufrufen, aber die Werte sind logischerweise noch nicht verfügbar. Ist sowas irgendwie möglich

    Poste bitte Definitionen für die fett markierten Stellen. Also z.B. welche Werte sind nicht verfügbar?
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Ich möchte gerne an den gesetzten Int werden kommen und eine C Api aufrufen.

    Pseudo:

    C-Quellcode

    1. int* clazz::operator[](const char* parameter)
    2. {
    3. return &blaa...;
    4. vkBufferCommandParam(VK_BUFFERCOMMAND, &bla, parameter);
    5. }


    Muss ich dafür irgendwie ein Proxy objekt zurück geben was dann nochmal = überläd?
    Ich verstehe immer noch nicht, was Du vor hast.
    Der []-Operator gibt einen Pointer zurück. Das ist der Sinn der Sache. Der Aufrufer kann dann entweder den Wert lesen, an den der Pointer zeigt (das wäre dann sozusagen ein lesender Array-Zugriff) oder einen Wert dort hinschreiben, wohin der Pointer zeigt (das wäre ein schreibender Zugriff).
    Nach dem Return nochwas auszuführen geht nicht, denn Return verlässt ja die Methode.
    Und aus dem Satz "Ich möchte gerne an den gesetzten Int [...] kommen" lese ich heraus, dass Du sowas machen möchtest:

    VB.NET-Quellcode

    1. Public Default Property Item(Index As String) As Integer
    2. Get
    3. Return blaa
    4. End Get
    5. Set(value As Integer)
    6. blaa = value
    7. vkBufferDingsbums(value)
    8. End Set
    9. End Property

    Das funktioniert mit dem obrigen Code nicht. Entweder muss der Aufrufer die Funktion selbst aufrufen, nachdem der []-Operator zurückkehrt:

    C-Quellcode

    1. clazz x = ...;
    2. x["Hallo"] = 10;
    3. vkBufferDings(10);

    Oder Du verwendest nicht diesen Operator, sondern einen Getter und einen Setter (ähnlich wie bei der VB-Property):

    C-Quellcode

    1. //Pseudocode, denn ich kenne mich mit den Details von C++ nicht gut genug aus.
    2. void SetItem(char* Index, int Value)
    3. {
    4. //blaa setzen
    5. vkBufferDings(Value);
    6. }
    7. int GetItem(char* Index)
    8. {
    9. //blaa zurückgeben
    10. }
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils