Czy istnieje sposób na wywołanie funkcji składowej bez. * Lub -> * operatora
Poniżej sposób dzwonieniaD::foo
funkcja poprzez funkcję wskaźnik do członka wygeneruje błąd:nakaz uzycia.*
lub->*
wywołać funkcję wskaźnik do członka w 'f (...)' .. oczywiście nie tak nazywamy funkcje wskaźnika do członka.
Właściwy sposób dzwonienia to(d.*f)(5);
LUB(p->*f)(5);
Moje pytanie brzmi: „Czy istnieje sposób na wywołanie funkcji członka klasy bez obiektu klasy po lewej stronie? Zastanawiam się, czy moglibyśmy przekazać obiekt klasy (this
) jako regularny argument?
Moim zdaniem na koniec dnia (na poziomie zespołu / binarnym) wszystkie funkcje składowe klasy są normalnymi funkcjami, które powinny działać na n + 1 argumentach, gdzie (+1 jest zathis
)
Jeśli o tym porozmawiamyD::foo
funkcja poniżej, na poziomie zespołu / binarnym powinna działać na dwóch argumentach:
this
)iint
.więc jest sposób (lub hack) na wywołanieD::foo
z obiektem klasy przekazanym do niego jako argument funkcji zamiast użycia. or -> or .* or ->*
operatory na obiekcie klasy?
Przykładowy kod:
#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;
}
Jedną z metod jest użycie wiązania zwiększającego, tj
(boost:: bind (&D::foo, &d, 5)) ();
EDYCJA: „Proszę pamiętać, że nie szukam wersji tego programu, który działa, wiem, jak to zrobić”