#include <iostream>
#include <functional>
class Window
{
public:
void ProcessMessage(std::function<int()> create, std::function<int()> update)
{
create();
update();
}
};
class App
{
private:
Window win;
private:
int OnUserCreate()
{
std::cout << "OnUserCreate() called" << std::endl;
return 1;
}
int OnUserUpdate()
{
std::cout << "OnUserUpdate() called" << std::endl;
return 1;
}
public:
void Run()
{
win.ProcessMessage(
std::bind(&App::OnUserCreate, this),
std::bind(&App::OnUserUpdate, this)
);
}
};
int main()
{
App app;
//while (true)
{
app.Run();
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCmNsYXNzIFdpbmRvdwp7CnB1YmxpYzoKICAgIHZvaWQgUHJvY2Vzc01lc3NhZ2Uoc3RkOjpmdW5jdGlvbjxpbnQoKT4gY3JlYXRlLCBzdGQ6OmZ1bmN0aW9uPGludCgpPiB1cGRhdGUpCiAgICB7CiAgICAgICAgY3JlYXRlKCk7CiAgICAgICAgdXBkYXRlKCk7CiAgICB9Cn07CgpjbGFzcyBBcHAKewpwcml2YXRlOgogICAgV2luZG93IHdpbjsKCnByaXZhdGU6CiAgICBpbnQgT25Vc2VyQ3JlYXRlKCkKICAgIHsKCQlzdGQ6OmNvdXQgPDwgIk9uVXNlckNyZWF0ZSgpIGNhbGxlZCIgPDwgc3RkOjplbmRsOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIGludCBPblVzZXJVcGRhdGUoKQogICAgewoJCXN0ZDo6Y291dCA8PCAiT25Vc2VyVXBkYXRlKCkgY2FsbGVkIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgpwdWJsaWM6CiAgICB2b2lkIFJ1bigpCiAgICB7CiAgICAgICAgd2luLlByb2Nlc3NNZXNzYWdlKAogICAgICAgIAlzdGQ6OmJpbmQoJkFwcDo6T25Vc2VyQ3JlYXRlLCB0aGlzKSwKICAgICAgICAJc3RkOjpiaW5kKCZBcHA6Ok9uVXNlclVwZGF0ZSwgdGhpcykKICAgICAgICApOwogICAgfQp9OwoKaW50IG1haW4oKQp7CiAgICBBcHAgYXBwOwogICAgLy93aGlsZSAodHJ1ZSkKICAgIHsKICAgICAgICBhcHAuUnVuKCk7CiAgICB9Cn0=