#include #include using std::cout; using std::endl; /********************************************************************************************** * */ class MyClass { public: MyClass() { private_x = 5; }; int public_x = 12; private: int private_x; }; /********************************************************************************************** * */ class YourClass { public: YourClass() { private_y = 8; } private: int private_y; }; /********************************************************************************************** * */ void g(MyClass * a1, YourClass* a2) { printf("access both classes\n"); printf("MyClass: %d\n", a1->public_x); printf("YourClass: private\n"); } /********************************************************************************************** * */ class EventHandler { public: std::function cb = nullptr; template void addHandler(std::function callback) { cout << "Handler added..." << endl; cb = callback; } template void call_cb(T1* myCl, T2* yourCl) { if(cb != nullptr) (cb)(myCl, yourCl); } }; /********************************************************************************************** * */ int main(int argc, char** argv) { MyClass* myClass = new MyClass(); YourClass* yourClass = new YourClass(); EventHandler* handler = new EventHandler(); /* * Here is the compiler error */ handler->addHandler(g); handler->call_cb(myClass, yourClass); }