#include <iostream>
#include <functional>

class Foo {
public:
    virtual void play(std::function<void()> functor) {
        functor();
    }
};

class Baz {
public:
    virtual void asdf(std::string str) {
        std::cout << str << std::endl;
    }
};

template<class T>
class Bar : T {
public:
    void asdf(std::string str) {
        std::cout << str << std::endl;
    }
    void play(std::function<void()> functor) {
        functor();
    }
};

int main() {
    Bar<Foo>().play([]()->void {
        std::cout << "Hello, world!" << std::endl;
    });
    return 0;
}


템플릿으로 상속받기