[C++] Функциональный указатель на функцию-член


Answers

int (*x)() не является указателем на функцию-член. Указатель на функцию-член записывается следующим образом: int (A::*x)(void) = &A::f; ,

Question

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

В этом примере я хотел бы, чтобы результат был «1»,

class A {
public:
 int f();
 int (*x)();
}

int A::f() {
 return 1;
}


int main() {
 A a;
 a.x = a.f;
 printf("%d\n",a.x())
}

Но это не удается при компиляции. Зачем?




Функция участника вызова в строковой команде

#include <iostream>
#include <string>


class A 
{
public: 
    void call();
private:
    void printH();
    void command(std::string a, std::string b, void (A::*func)());
};

void A::printH()
{
    std::cout<< "H\n";
}

void A::call()
{
    command("a","a", &A::printH);
}

void A::command(std::string a, std::string b, void (A::*func)())
{
    if(a == b)
    {
        (this->*func)();
    }
}

int main()
{
    A a;
    a.call();
    return 0;
}

Обратите внимание на (this->*func)(); и способ объявить указатель функции с именем класса void (A::*func)()