Страницы

Поиск по вопросам

суббота, 21 декабря 2019 г.

Вызов методов класса через указатель на функцию

#cpp #классы #функции #указатели


Хочу реализовать возможность передавать в качестве аргумента функции указатель на
метод разных классов.

class A1
{
public:
    void show()
    {
        std::cout << "A1" << std::endl;
    }
};

class B1
{
public:
    void show()
    {
        std::cout << "B1" << std::endl;
    }
};

void callf(void (*fp)())
{
    fp();
}

int main()
{
    callf(&A1::show);
    callf(&B1::show);

    return 0;
}

    


Ответы

Ответ 1



В вашем варианте забыта мелочь - то, что нестатическая функция-член требует наличия объекта, для которого вызывается. Так что просто так вызвать не получится, нужен объект. Или статическая функция. Вот так - запросто: class A1 { public: static void show() { std::cout << "A1" << std::endl; } }; class B1 { public: static void show() { std::cout << "B1" << std::endl; } }; void callf(void (*fp)()) { fp(); } int main() { callf(&A1::show); callf(&B1::show); return 0; } Если все же не статические - то, например, вот: class A1 { public: void show() { std::cout << "A1" << std::endl; } }; class B1 { public: void show() { std::cout << "B1" << std::endl; } }; template void callf(T& t, void (T::*f)()) { (t.*f)(); } int main() { A1 a; B1 b; callf(a,&A1::show); callf(b,&B1::show); return 0; }

Комментариев нет:

Отправить комментарий