wie verwendet ihr operator= ?



  • Hi,

    ich hab ein ziemlich triviales Problem, was mich schon länger verfolgt und für das ich jetzt endlich mal eine Antwort brauche.

    Die Verwendung von op= ansich ist ja kein Problem.

    std::string foo = "hallo";
    //...
    foo = "welt";
    

    Sieht einfach aus, ist auch einfach.

    Aber was tun, wenn ein Objekt mehrere Werte braucht? Man stelle sich nur mal einen 2D Vektor vor. Ein typisches Beispiel würde wohl wie folgt aussehen:

    vector2d bar;
    //...
    bar = vector2d(200, 100);
    

    Sprich, man erstellt einfach ein temporäres Objekt, welches man entsprechend konstruieren kann und lässt dann den copy op die eigentliche Zeweisung durchführen. Nur, kann ein Compiler dieses temporäre Objekt überhaupt wegoptimieren? Vielleicht ist dessen Erstellung ja nicht immer erwünscht, zB wenn eine Klasse einen recht aufwändigen ctor mitbringt.

    Oder man weist dem Objekt die Werte einfach einzeln zu:

    bar.x = 200;
    bar.y = 100;
    

    Das kann aber auch nicht immer erwünscht sein. Man denke nur mal an eine GUI Anwendung, wo man die Position eines Fenster auf diese Weise verändern kann. Man möchte ja, dass das Fenster sofort zu Position (200,100) verschoben wird und nicht erst horizontal zu Position 200 und dann vertikal zu Position 100.

    Oder man bietet einfach eine Funktion assign(x,y) an oder überlädt op() oder...oder...oder...

    Wie handelt ihr sowas?
    Ich suche eigentlich eine Möglichkeit, die einfache Benutzung und Verkettung erlaubt, die aber die oben angesprochenen Nachteile nicht hat.



  • Ich machs immer mit temporären Objekt, so oft kommt das ja gar nicht vor. Meistens weist man ja nur zwischen gleichen Typen hin und her zu.

    op() zu überladen ist eher schwachsinn, da noch besser assign().

    Das einzelne Zuweisen der Werte ist nicht meins, das mach ich nur wenn ich wirklich nur *einen* der Werte setzen will (BTW: Da gehört eine set-Methode hin!)

    MfG SideWinder



  • Ich halt's bei sowas immer noch am liebsten mit assign(a,b,c,d,...). Damit bin ich immer ganz gut gefahren. Und in Java z.B. bleibt einem eh nicht viel anderes übrig, da op-Überladung net geht.



  • SideWinder schrieb:

    BTW: Da gehört eine set-Methode hin!

    Nicht, wenn x und y Properties sind. 🙂

    GPC schrieb:

    Ich halt's bei sowas immer noch am liebsten mit assign(a,b,c,d,...)

    Ist mir fast auch noch am sympathischsten. Letztendlich werde ich damit wohl leben müssen und auch können. Ich frage mich nur, ob es einen speziellen Trick gibt, bei dem ein Compiler die temporäre Objekt Variante recht gut optimieren kann. Microsoft verwendet zB in ihrem C++ .NET Framework sowas recht häufig.



  • Nicht, wenn x und y Properties sind.

    Gibts in C++/CLI Properties? Oder hast du dir ein eigenes Framework geschrieben? Oder verwendest du am Ende das von MrN?

    MfG SideWinder



  • SideWinder schrieb:

    Gibts in C++/CLI Properties?

    Microsoft hat seinem Compiler ja Erweiterungen für Properties spendiert. Die werden für C++/CLI auch verwendet.

    SideWinder schrieb:

    Oder hast du dir ein eigenes Framework geschrieben? Oder verwendest du am Ende das von MrN?

    Für Properties hab ich mir eigene Klassen gebastelt, ohne irgendwelche Compiler Erweiterungen, nur Standard ISO C++.
    Sprich, wenn du

    bar.x = 200;
    

    schreibst, wird eigentlich eine Member-Funktion aufgerufen, die zB set_x heisst. Je nachdem, wie das Property definiert wurde.



  • SideWinder schrieb:

    Nicht, wenn x und y Properties sind.

    Gibts in C++/CLI Properties? Oder hast du dir ein eigenes Framework geschrieben? Oder verwendest du am Ende das von MrN?

    MfG SideWinder

    das framework von MrN unterstützt keine operstorsemantik, das ist meiner meinung nach ein bissl doof. ansonsten ist das ganze natürlich sehr schön 🙂



  • Ich habs selbst noch nicht gesehen, hab nur mal die Feature-Liste bestaunen können 🙂

    MfG SideWinder


Anmelden zum Antworten