#include <iostream> #include <string> class MyClass { public: MyClass(int i) : m_i(i) {} void func() { std::cout << "m_i = " << m_i << "\n"; } private: int m_i; }; int main() { MyClass obj1(1); MyClass obj2(2); void (MyClass::*fptr)() = &MyClass::func; // define and initialize function pointer obj1.func(); ((&obj2)->*fptr)(); // use function pointer via an object pointer }
Однако, с помощью более свежих версий C++ это можно упростить:
#include <iostream> #include <string> class MyClass { public: MyClass(int i) : m_i(i) {} void func() { std::cout << "m_i = " << m_i << "\n"; } private: int m_i; }; int main() { MyClass obj1(1); MyClass obj2(2); auto fptr = &MyClass::func; // define and initialize function pointer obj1.func(); ((&obj2)->*fptr)(); // use function pointer via an object pointer }
Приятно, что можно забыть этот синтаксис указателя на функцию и отдать эту работу компилятору.