Функциональные указатели с классами - PullRequest
0 голосов
/ 19 февраля 2020

Я искал несколько дней, и на данный момент я предполагаю, что я смотрю не по правильным критериям. Вот что мне нужно сделать

class AB
{
    public:
        std::function<void()>addr;
};

class BC
{
    public:
        void myTestFunc(std::string value)
        {
            std::cout << "AB::myTestFunc called: " << value << std::endl;
        }
};

int main(void)
{
    AB ob;
    BC obj2;

    ob.addr = std::bind(&obj2::myTestFunc, "");
    // so that i can call
    (ob.addr)("testing");

    return 0;
}

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

1 Ответ

1 голос
/ 19 февраля 2020

Я верю, что это то, куда ты идешь.

class AB
{
    public:
        std::function<void(std::string)>addr;
};

class BC
{
    public:
        void myTestFunc(std::string value)
        {
            std::cout << "AB::myTestFunc called: " << value << std::endl;
        }
};

int main(void)
{
    AB ob;
    BC ob2;
    std::string i = "testing";
    ob.addr = std::bind(&BC::myTestFunc, &ob2, i);
    ob.addr(i);

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...