#include <iostream>
#include <functional>
class Bar
{
public:
Bar() {}
Bar(std::function<void(void)> funct_) : funct(funct_) {}
void setFunct(std::function<void(void)> funct_)
{
funct = funct_;
}
void run()
{
for (int k = 0; k < 10; ++k)
{
funct();
}
};
std::function<void(void)> funct;
};
class Foo
{
public:
Foo()
{
bar.setFunct(std::bind(&Foo::printSimpleFoo, this));
}
void printSimpleFoo()
{
std::cout << "Hello World\n";
}
void start()
{
bar.run();
}
private:
Bar bar;
};
int main()
{
Foo foo;
foo.start();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCmNsYXNzIEJhcgp7CnB1YmxpYzoKICAgIEJhcigpIHt9CiAgICAKICAgIEJhcihzdGQ6OmZ1bmN0aW9uPHZvaWQodm9pZCk+IGZ1bmN0XykgOiBmdW5jdChmdW5jdF8pIHt9CgogICAgdm9pZCBzZXRGdW5jdChzdGQ6OmZ1bmN0aW9uPHZvaWQodm9pZCk+IGZ1bmN0XykKICAgIHsKICAgICAgICBmdW5jdCA9IGZ1bmN0XzsKICAgIH0KICAgIAogICAgdm9pZCBydW4oKQogICAgewogICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgMTA7ICsraykKICAgICAgICB7CiAgICAgICAgICAgIGZ1bmN0KCk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgc3RkOjpmdW5jdGlvbjx2b2lkKHZvaWQpPiBmdW5jdDsKfTsKCmNsYXNzIEZvbwp7CnB1YmxpYzoKICAgIEZvbygpCiAgICB7CiAgICAgICAgYmFyLnNldEZ1bmN0KHN0ZDo6YmluZCgmRm9vOjpwcmludFNpbXBsZUZvbywgdGhpcykpOwogICAgfQoKICAgIHZvaWQgcHJpbnRTaW1wbGVGb28oKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiSGVsbG8gV29ybGRcbiI7CiAgICB9CgogICAgdm9pZCBzdGFydCgpCiAgICB7CiAgICAgICAgYmFyLnJ1bigpOwogICAgfQoKcHJpdmF0ZToKICAgIEJhciBiYXI7Cn07CgppbnQgbWFpbigpCnsKICAgIEZvbyBmb287CiAgICBmb28uc3RhcnQoKTsKCiAgICByZXR1cm4gMDsKfQ==