Design-Frage: private-Zugriff bei einer Property-Klasse simulieren



  • aber wie willst du mithilfe dieser storage policie eine interaktion der einzelnen properties erreichen?



  • ja, daran arbeite ich noch, das meinte ich mit Verzahnung *g*. Irgend wie brauchen die Getter und Setter ja einen Hinweis auf die instanziierte StoragePolicy. Schade, dass es kein has_function<Klasse,Funktion> gibt 😉



  • kingruedi schrieb:

    Ich glaub ich muss das intern noch ein wenig verzahnen, um es praktisch nutzbarer zu machen. Ich werde am Wochenende mal meine Arbeiten vorstellen.

    Da bin ich mal gespannt. Ich arbeite nun schon seit einiger Zeit an einer Property Klasse und hab bisher zwar was für mich brauchbares aber noch nichts zufrieden stellendes hinbekommen.



  • Schade, dass es kein has_function<Klasse,Funktion> gibt

    solange es ein isDerived gibt, ist das kein problem.
    property muss einfach von StoragePolicy erben.

    //edit hmm wie wollt ihr eigentlich komplexere objekte darstellen?
    wollt ihr nur zugriff über den op-> erlauben? der op. ist ja nicht erlaubt(leider).



  • otze schrieb:

    //edit hmm wie wollt ihr eigentlich komplexere objekte darstellen?
    wollt ihr nur zugriff über den op-> erlauben? der op. ist ja nicht erlaubt(leider).

    Solche Sachen sind imo noch ziemlich komplex. Zumindest hab ich noch keine zufrieden stellende Lösung gefunden. Nur mal so als Beispiel, gegeben sei folgender Typ

    struct point
    {
        int x;
        int y;
        point(int x_, int y_)
            : x(x_)
            , y(y_)
        {
        }
    };
    

    Davon erstellen wir uns nun ein Property

    property<point, setter, getter> position;
    

    Sobald wir folgende Sachen machen

    position = point(0, 0);
    point tmp = position;
    

    ist alles ok, da die getter/setter aufgerufen werden. Was ist aber mit folgendem

    position.x = 10;
    int tmp = position.y;
    

    ?
    Das funktioniert erstmal nur, wenn das property von point erbt. Und selbst dann werden keine getter/setter aufgerufen, sondern einfach stur die x/y Member benutzt. Damit sowas richtig funktioniert, müsste point wie folgt aussehen

    struct point
    {
        property<int, setter_x, getter_x> x;
        property<int, setter_y, getter_y> y;
        point(int x_, int y_)
            : x(x_)
            , y(y_)
        {
        }
    };
    

    Natürlich kann man keine bestehenden Datentypen einfach so anpassen. Abhilfe könnten hier Template Typen schaffen. Dann wird aus T=int halt einfach T=propety<int, ...>. Ich denke allerdings, dass auch sowas einige schwer zu lösende Probleme hat. Aber vielleicht weiss king ja schon mehr.



  • wollt ihr nur zugriff über den op-> erlauben? der op. ist ja nicht erlaubt(leider).

    Ich biete den op-> an, der op. funktioniert nur für konstante Methoden bei mir!

    Der op-> liefert ein temporäres Objekt zurück, dass intern eine Kopie der StoragePolicy enthält, die einmal via Getter bearbeitet wurde und wenn das Objekt geändert wurde, dann wird es am Ende der Lebenszeit des temp-Objekts via des Setters zurückkopiert.



  • kingruedi schrieb:

    Ich werde am Wochenende mal meine Arbeiten vorstellen.

    Warum hast du es nicht veröffentlicht. Ich wäre sehr interessiert mir das ganze mal anzuschauen.



  • habe mir nur kurz die Problemstellung durchgelesen,
    vielleicht suchst du Slüsselwort friend



  • @Moppelkotze
    Ein paar Design und andere Probleme haben das verschoben, aber ich werd das noch dieses Jahr fertig stellen.

    @leo aka qsch
    Nein, dass kann man nämlich mit Template-Parametern nicht benutzen.



  • Warum eigentlich? (Nervt mich auch)



  • kingruedi schrieb:

    @Moppelkotze
    Ein paar Design und andere Probleme haben das verschoben, aber ich werd das noch dieses Jahr fertig stellen.

    Cool, freue mich schon drauf 😉 .



  • ness schrieb:

    Warum eigentlich? (Nervt mich auch)

    weil es jedwede kapselung ad absurdum führen würde


Anmelden zum Antworten