#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=