#include <iostream>
#include <functional>
class Building {
// C++ classes are private by default
int timer_;
std::function<void(Building*)> update_;
public:
void update() {
update_(this);
}
static Building getBuildingA() {
Building b;
b.timer_ = 42;
b.update_ = [](Building* b) {
b->timer_++;
std::cout << b->timer_ << '\n';
};
}
};
int main() {
Building b = Building::getBuildingA();
b.update();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCmNsYXNzIEJ1aWxkaW5nIHsKCS8vIEMrKyBjbGFzc2VzIGFyZSBwcml2YXRlIGJ5IGRlZmF1bHQKCWludCB0aW1lcl87CglzdGQ6OmZ1bmN0aW9uPHZvaWQoQnVpbGRpbmcqKT4gdXBkYXRlXzsKCnB1YmxpYzoKCXZvaWQgdXBkYXRlKCkgewoJCXVwZGF0ZV8odGhpcyk7Cgl9CgogICAgc3RhdGljIEJ1aWxkaW5nIGdldEJ1aWxkaW5nQSgpIHsKICAgIAlCdWlsZGluZyBiOwogICAgCWIudGltZXJfID0gNDI7CiAgICAJYi51cGRhdGVfID0gW10oQnVpbGRpbmcqIGIpIHsKICAgIAkJYi0+dGltZXJfKys7CiAgICAJCXN0ZDo6Y291dCA8PCBiLT50aW1lcl8gPDwgJ1xuJzsKICAgIAl9OwogICAgfQp9OwoKaW50IG1haW4oKSB7CiAgICBCdWlsZGluZyBiID0gQnVpbGRpbmc6OmdldEJ1aWxkaW5nQSgpOwogICAgYi51cGRhdGUoKTsKCXJldHVybiAwOwp9