#include <iostream>
struct TimerService
{
virtual void handleTimerEvent() = 0;
TimerService()
{
}
void trigger()
{
handleTimerEvent();
}
};
class A : public TimerService
{
const char* m_name;
public:
A(const char* name_) : TimerService(), m_name(name_) {}
void handleTimerEvent() override
{
std::cout << "Handling timer event in " << m_name << '\n';
}
};
void triggerEvent(TimerService& service)
{
service.trigger();
}
int main()
{
A a("A instance 'a'"), b("A instance 'b'");
triggerEvent(b);
triggerEvent(a);
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KCiAgICBzdHJ1Y3QgVGltZXJTZXJ2aWNlCiAgICB7CiAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVRpbWVyRXZlbnQoKSA9IDA7CgogICAgICAgIFRpbWVyU2VydmljZSgpCiAgICAgICAgewogICAgICAgIH0KCiAgICAgICAgdm9pZCB0cmlnZ2VyKCkKICAgICAgICB7CiAgICAgICAgICAgIGhhbmRsZVRpbWVyRXZlbnQoKTsKICAgICAgICB9CiAgICB9OwoKICAgIGNsYXNzIEEgOiBwdWJsaWMgVGltZXJTZXJ2aWNlCiAgICB7CgogICAgICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKCiAgICBwdWJsaWM6CiAgICAgICAgQShjb25zdCBjaGFyKiBuYW1lXykgOiBUaW1lclNlcnZpY2UoKSwgbV9uYW1lKG5hbWVfKSB7fQoKICAgICAgICB2b2lkIGhhbmRsZVRpbWVyRXZlbnQoKSBvdmVycmlkZQogICAgICAgIHsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICJIYW5kbGluZyB0aW1lciBldmVudCBpbiAiIDw8IG1fbmFtZSA8PCAnXG4nOwogICAgICAgIH0KICAgIH07CgogICAgdm9pZCB0cmlnZ2VyRXZlbnQoVGltZXJTZXJ2aWNlJiBzZXJ2aWNlKQogICAgewogICAgICAgIHNlcnZpY2UudHJpZ2dlcigpOwogICAgfQoKICAgIGludCBtYWluKCkKICAgIHsKICAgICAgICBBIGEoIkEgaW5zdGFuY2UgJ2EnIiksIGIoIkEgaW5zdGFuY2UgJ2InIik7CiAgICAgICAgdHJpZ2dlckV2ZW50KGIpOwogICAgICAgIHRyaWdnZXJFdmVudChhKTsKICAgIH0=