Есть ли способ вызвать функцию-член без оператора. * Или -> *

Ниже метод вызоваD::foo Функция через указатель на член генерирует ошибку:должен использовать.* или же->* вызвать функцию указателя на член в 'f (...)' .. конечно, это не то, как мы вызываем функции указателя на член.

Правильный способ звонка(d.*f)(5); ИЛИ ЖЕ(p->*f)(5);

Мой вопрос: есть ли способ вызвать функцию-член класса без объекта класса с левой стороны? Интересно, могли бы мы передать объект класса (this) как обычный аргумент?

На мой взгляд, в конце дня (на уровне сборки / двоичного кода) все функции-члены класса являются обычными функциями, которые должны работать с n + 1 аргументами, где (+1 дляthis)

Если мы говорим оD::foo функция ниже, на уровне сборки / двоичного кода она должна оперировать двумя аргументами:

Сам объект класса (указатель на объект класса D называетсяthisint.

Итак, есть ли способ (или взломать), чтобы позвонить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)) ();

РЕДАКТИРОВАТЬ: «Обратите внимание, я не ищу версию этой программы, которая работает, я знаю, как заставить ее работать»

Ответы на вопрос(11)

Ваш ответ на вопрос