Есть ли способ вызвать функцию-член без оператора. * Или -> *
Ниже метод вызоваD::foo
Функция через указатель на член генерирует ошибку:должен использовать.*
или же->*
вызвать функцию указателя на член в 'f (...)' .. конечно, это не то, как мы вызываем функции указателя на член.
Правильный способ звонка(d.*f)(5);
ИЛИ ЖЕ(p->*f)(5);
Мой вопрос: есть ли способ вызвать функцию-член класса без объекта класса с левой стороны? Интересно, могли бы мы передать объект класса (this
) как обычный аргумент?
На мой взгляд, в конце дня (на уровне сборки / двоичного кода) все функции-члены класса являются обычными функциями, которые должны работать с n + 1 аргументами, где (+1 дляthis
)
Если мы говорим оD::foo
функция ниже, на уровне сборки / двоичного кода она должна оперировать двумя аргументами:
this
)иint
.Итак, есть ли способ (или взломать), чтобы позвонитьD::foo
с объектом класса, переданным ему в качестве аргумента функции вместо использования. or -> or .* or ->*
операторы на объекте класса?
Образец кода:
#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;
}
Один метод использует Boost Bind, т.е.
(boost:: bind (&D::foo, &d, 5)) ();
РЕДАКТИРОВАТЬ: «Обратите внимание, я не ищу версию этой программы, которая работает, я знаю, как заставить ее работать»