#include <functional>
#include <iostream>
#include <memory>
class AAA {};
class BBB {};
class Notifier
{
public:
Notifier(std::function<void(AAA&, BBB&)> on_notify)
:on_notify_(on_notify)
{ }
void notify()
{
if (on_notify_)
{
AAA a{};
BBB b{};
on_notify_(a, b);
}
}
std::function<void(AAA&, BBB&)> on_notify_;
};
struct Manager
{
Manager()
{
n_ = std::make_unique<Notifier>(std::bind(&Manager::trigger, this));
}
void trigger()
{
std::cout << "it's also notified!" << std::endl;
}
std::unique_ptr<Notifier> n_;
};
int main()
{
Manager s;
s.n_->notify();
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPG1lbW9yeT4KCmNsYXNzIEFBQSB7fTsKY2xhc3MgQkJCIHt9OwoKY2xhc3MgTm90aWZpZXIKewpwdWJsaWM6CiAgICBOb3RpZmllcihzdGQ6OmZ1bmN0aW9uPHZvaWQoQUFBJiwgQkJCJik+IG9uX25vdGlmeSkKICAgICAgICA6b25fbm90aWZ5Xyhvbl9ub3RpZnkpCiAgICB7IH0KCiAgICB2b2lkIG5vdGlmeSgpCiAgICB7CiAgICAgICAgaWYgKG9uX25vdGlmeV8pCiAgICAgICAgewogICAgICAgICAgICBBQUEgYXt9OwogICAgICAgICAgICBCQkIgYnt9OwogICAgICAgICAgICBvbl9ub3RpZnlfKGEsIGIpOwogICAgICAgIH0KICAgIH0KCiAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQUFBJiwgQkJCJik+IG9uX25vdGlmeV87Cn07CgpzdHJ1Y3QgTWFuYWdlcgp7CiAgICBNYW5hZ2VyKCkKICAgIHsKICAgICAgICBuXyA9IHN0ZDo6bWFrZV91bmlxdWU8Tm90aWZpZXI+KHN0ZDo6YmluZCgmTWFuYWdlcjo6dHJpZ2dlciwgdGhpcykpOwogICAgfQoKICAgIHZvaWQgdHJpZ2dlcigpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJpdCdzIGFsc28gbm90aWZpZWQhIiA8PCBzdGQ6OmVuZGw7CiAgICB9CgogICAgc3RkOjp1bmlxdWVfcHRyPE5vdGlmaWVyPiBuXzsKfTsKCmludCBtYWluKCkKewogICAgTWFuYWdlciBzOwogICAgcy5uXy0+bm90aWZ5KCk7Cn0=