#include class Callback { public: virtual void call() = 0; }; Callback *registered_callback; void register_callback(Callback *cb) { registered_callback = cb; } void call_registered_callbacks() { registered_callback->call(); } class MyCallback : public Callback { private: int value; public: MyCallback(int in_value):value(in_value){} void call() override { std::cout << value << std::endl; } }; int main() { auto cb = new MyCallback{10}; register_callback(cb); std::cout << "lalilala" << std::endl; call_registered_callbacks(); }