Указатель на функцию-член другого объекта - PullRequest
0 голосов
/ 29 марта 2020
class A
{
private:
    int _i;

    int calc() { return i; }

public:
    int (*get)() = &A::calc;

    A(int i){ _i = i; }
    A(A *a ) { get = a->get; }
};

int main(){
    A a = new A(5);
    A b = new A(a)
}

Привет, мне кажется, у меня особый вопрос. Я не знаю правильного тега, поэтому я пытаюсь описать как можно лучше:

Существует класс A с функцией calc и указателем на функцию get с равным размером cal c. Обычно get должен ссылаться на calc своего экземпляра, но для особых условий он должен быть перенаправлен на calc другого экземпляра. Есть ли способ реализовать это?

Спасибо. (синтаксис - псевдокод)

edit: фон состоит в том, что calc выполняет некоторые сложные вычисления с множеством различных переменных-членов, и я хочу получить только результат

1 Ответ

2 голосов
/ 29 марта 2020

уверен:

std::function<int()> get = std::bind(&A::calc, this);

позже, вы можете изменить его, чтобы указать на другой экземпляр "b":

get = std::bind(&A::calc, &b)

Также обратите внимание, что ваш код не будет компилироваться, как вы попытка назначить указатель на функцию-член (& A :: cal c) на простой указатель на функцию (int (*) ()). Синтаксис для объявления указателя на функцию-член будет int (A :: * get) (), но тогда вы сможете вызвать этот указатель на функцию-член только в том случае, если у вас есть экземпляр (если вы не связываете его, как в решении Я предоставил выше).

instance.*get();

or

pointer ->* get();

Обратите внимание на использование операторов * и -> *

...