#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; } }; templatevoid callf(T& t, void (T::*f)()) { (t.*f)(); } int main() { A1 a; B1 b; callf(a,&A1::show); callf(b,&B1::show); return 0; }
Комментариев нет:
Отправить комментарий