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:
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."