Function Call Operator ()



  • Erledigt!!!!!!!

    Guten Tag,

    ich habe folgendes Problem:
    Ich habe einen Klasse mit einer Überladung des function call operators(), den übergebe ich an eine andere Funktion einer anderen Klasse. Nur leider wird jetzt die Klasse kopiert. Hier mein Code, dann wird es vielleicht deutlicher:

     foo::operator()(int a, int b){
    	 std::cout << &master_vel_ << std::endl;
    } 
    

    Das obere wird an das untere übergeben.

    foo follow();
    robot->control(follow);
    

    Wenn ich nun die Adresse von master_vel_ im Kontruktor mit der Adresse im functions operator() vergleiche bekomme ich versch. Adressen. Daraus schließe ich dass das Objekt kopiert wird. Nun also die Frage, wie bekomme ich hin das die beiden die selbe Adresse haben.
    Robot->control ist eine externe Funktion die ich nicht ändern kann, also muss der functions operator so aussehen.

    Was bisher funktioniert hat: Globale Veriablen und im Konstrukter zwischen speichere ich die Adresse. Das finde ich aber eher etwas unschön und suche deshalb nach alternativen.

    ptr_vel_ = &master_vel_;
    

    Vielen Dank für die Hilfe im Vorraus,
    Sven



  • Tja, wenn man jetzt wüsste wie die Signatur von robot::control aussieht. Aber das verschweigst du ja.

    @zwerg91 sagte in Function Call Operator ():

    foo follow();

    deklariert eine Funktion mit Namen follow.

    robot->control(follow);

    Die Funktion wird übergeben.

    Das dürfte wohl kein echter Code sein, den du hier zeigst.



  • @zwerg91 sagte in Function Call Operator ():

    Robot->control ist eine externe Funktion die ich nicht ändern kann, also muss der functions operator so aussehen.

    Das ist halt unschön, wenn das Teil keine Referenz nimmt, dann wird da immer mit einer Kopie innerhalb der Funktion hantiert. Umgehen könntest du das mit Pointern. Dann wird intern der Pointer kopiert und zeigt somit noch auf die gleiche Speicherstelle. Aber das würde ich nicht tun, denn das mieft nach einem Designfehler.

    Wenn du eine externe Lib benutzt, dann kuck mal lieber nach, dass du da nicht zufälligerweise irgendetwas von Haus aus schon falsch benutzt. Wofür brauchst du unbedingt das gleiche Objekt? Was steht in den Docs, wie die externe Methode anzuwenden ist?



  • Erstmal vielen Dank für die Hilfe.

    Natürlich einfach einen Zeiger auf das Objekt anstatt das Objekt in der Klasse zu erstellen und dann darauf einen Zeiger zu machen. Manchmal hat man auch einfach nur ein Brett vor dem Kopf.

    Nochmal Danke für die Hilfe.

    Viele Grüße,
    Sven