Gibt es eine Möglichkeit, die Mitgliedsfunktion ohne den Operator. * Oder -> * aufzurufen?

Unten aufgeführte AnrufmethodeD::foo Funktion über Pointer-to-Member-Funktion erzeugt Fehler:verwenden müssen.* oder->* Zeiger auf Member-Funktion in 'f (...)' aufrufen ..natürlich nennen wir das nicht Pointer-to-Member-Funktionen.

Die richtige Art zu telefonieren ist(d.*f)(5); ODER(p->*f)(5);

Meine Frage lautet: 'Gibt es eine Möglichkeit, die Member-Funktion einer Klasse ohne das Klassenobjekt auf der linken Seite aufzurufen? Ich frage mich, ob wir Klasse Objekt übergeben könnten (this) als reguläres Argument?

Meiner Meinung nach sind am Ende des Tages (auf Assembler- / Binär-Ebene) alle Member-Funktionen einer Klasse normale Funktionen, die mit n + 1 Argumenten arbeiten sollten, wobei (+1 für istthis)

Wenn wir darüber redenD::foo Die folgende Funktion sollte auf Assembly- / Binärebene mit zwei Argumenten arbeiten:

Das Klassenobjekt selbst (Zeiger auf das aufgerufene Klasse-D-Objekt)this)und dasint.

Gibt es einen Weg (oder Hack) zu callen?D::foo mit Klassenobjekt als Funktionsargument übergeben, anstatt zu verwenden. or -> or .* or ->* Operatoren auf Klassenobjekt?

Beispielcode:

#include <iostream>
using namespace std;

class D {
    public:
        void foo ( int a ) {
            cout << "D" << endl;
        }

        int data;
};


//typedef void  __cdecl ( D::*  Func)(int);
typedef void ( D::*  Func)(int);

int main ( void ) 
{
    D d;

    Func f = &D::foo;
    f(&d, 5);

    return 1;
 }

Eine Methode ist die Verwendung von Boost-Bind, d.h.

(boost:: bind (&D::foo, &d, 5)) ();

BEARBEITEN: "Bitte beachten Sie, dass ich keine Version dieses Programms suche, die funktioniert. Ich weiß, wie es funktioniert."

Antworten auf die Frage(11)

Ihre Antwort auf die Frage