#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(
[this](){ return this->OnUserCreate(); },
[this](){ return this->OnUserUpdate(); }
);
}
};
int main()
{
App app;
//while (true)
{
app.Run();
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCmNsYXNzIFdpbmRvdwp7CnB1YmxpYzoKICAgIHZvaWQgUHJvY2Vzc01lc3NhZ2Uoc3RkOjpmdW5jdGlvbjxpbnQoKT4gY3JlYXRlLCBzdGQ6OmZ1bmN0aW9uPGludCgpPiB1cGRhdGUpCiAgICB7CiAgICAgICAgY3JlYXRlKCk7CiAgICAgICAgdXBkYXRlKCk7CiAgICB9Cn07CgpjbGFzcyBBcHAKewpwcml2YXRlOgogICAgV2luZG93IHdpbjsKCnByaXZhdGU6CiAgICBpbnQgT25Vc2VyQ3JlYXRlKCkKICAgIHsKCQlzdGQ6OmNvdXQgPDwgIk9uVXNlckNyZWF0ZSgpIGNhbGxlZCIgPDwgc3RkOjplbmRsOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIGludCBPblVzZXJVcGRhdGUoKQogICAgewoJCXN0ZDo6Y291dCA8PCAiT25Vc2VyVXBkYXRlKCkgY2FsbGVkIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgpwdWJsaWM6CiAgICB2b2lkIFJ1bigpCiAgICB7CiAgICAgICAgd2luLlByb2Nlc3NNZXNzYWdlKAogICAgICAgIAlbdGhpc10oKXsgcmV0dXJuIHRoaXMtPk9uVXNlckNyZWF0ZSgpOyB9LAogICAgICAgIAlbdGhpc10oKXsgcmV0dXJuIHRoaXMtPk9uVXNlclVwZGF0ZSgpOyB9CiAgICAgICAgKTsKICAgIH0KfTsKCmludCBtYWluKCkKewogICAgQXBwIGFwcDsKICAgIC8vd2hpbGUgKHRydWUpCiAgICB7CiAgICAgICAgYXBwLlJ1bigpOwogICAgfQp9