#include <iostream>
#include <functional>
class Parent
{
private:
std::function<const std::string(const std::string &)> m_func;
public:
//Parent();
Parent(std::function<const std::string(const std::string &)> func) {
m_func = func;
};
std::string Execute() {
return m_func("do it ");
};
};
class Child : public Parent
{
public:
Child():Parent( std::bind(&Child::hoge, this, std::placeholders::_1)){};
const std::string hoge(const std::string &str) {
return str + " you sould... may be can!";
};
};
int main() {
Child cld;
std::cout << cld.Execute() << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCmNsYXNzIFBhcmVudAp7CnByaXZhdGU6CiAgICBzdGQ6OmZ1bmN0aW9uPGNvbnN0IHN0ZDo6c3RyaW5nKGNvbnN0IHN0ZDo6c3RyaW5nICYpPiBtX2Z1bmM7CnB1YmxpYzoKICAgIC8vUGFyZW50KCk7CiAgICBQYXJlbnQoc3RkOjpmdW5jdGlvbjxjb25zdCBzdGQ6OnN0cmluZyhjb25zdCBzdGQ6OnN0cmluZyAmKT4gZnVuYykgewogICAgICAgIG1fZnVuYyA9IGZ1bmM7CiAgICB9OwoKICAgIHN0ZDo6c3RyaW5nIEV4ZWN1dGUoKSB7CiAgICAgICAgcmV0dXJuIG1fZnVuYygiZG8gaXQgIik7CiAgICB9Owp9OwpjbGFzcyBDaGlsZCA6IHB1YmxpYyBQYXJlbnQKewpwdWJsaWM6CiAgICBDaGlsZCgpOlBhcmVudCggc3RkOjpiaW5kKCZDaGlsZDo6aG9nZSwgdGhpcywgc3RkOjpwbGFjZWhvbGRlcnM6Ol8xKSl7fTsKICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGhvZ2UoY29uc3Qgc3RkOjpzdHJpbmcgJnN0cikgewogICAgICAgIHJldHVybiBzdHIgKyAiIHlvdSBzb3VsZC4uLiBtYXkgYmUgY2FuISI7CiAgICB9Owp9OwoKaW50IG1haW4oKSB7CiAgICBDaGlsZCBjbGQ7CiAgICBzdGQ6OmNvdXQgPDwgY2xkLkV4ZWN1dGUoKSA8PCBzdGQ6OmVuZGw7CiAgICByZXR1cm4gMDsKfQ==