#include <iostream>
#include <vector>
#define make delete new
typedef void (*Action) (void* context);
class Loop {
public:
Loop(const Loop& loop):
action(loop.action), context(loop.context)
{
action(context);
}
Loop(Action a, void* context):
action(a), context(context) {}
private:
Loop();
const Action action;
void* const context;
};
void count(void* c){
int& i = *static_cast<int*>(c);
std::cout << "step " << ++i << std::endl;
}
int main() {
int i = 0;
Loop counter(count, &i);
make std::vector<Loop>(10, counter);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojZGVmaW5lIG1ha2UgZGVsZXRlIG5ldwoKdHlwZWRlZiB2b2lkICgqQWN0aW9uKSAodm9pZCogY29udGV4dCk7CgpjbGFzcyBMb29wIHsKcHVibGljOgoJTG9vcChjb25zdCBMb29wJiBsb29wKToKCWFjdGlvbihsb29wLmFjdGlvbiksIGNvbnRleHQobG9vcC5jb250ZXh0KQoJewoJCWFjdGlvbihjb250ZXh0KTsKCX0KCQoJTG9vcChBY3Rpb24gYSwgdm9pZCogY29udGV4dCk6CglhY3Rpb24oYSksIGNvbnRleHQoY29udGV4dCkge30KCQpwcml2YXRlOgoJTG9vcCgpOwoJY29uc3QgQWN0aW9uIGFjdGlvbjsKCXZvaWQqIGNvbnN0IGNvbnRleHQ7Cn07Cgp2b2lkIGNvdW50KHZvaWQqIGMpewoJaW50JiBpID0gKnN0YXRpY19jYXN0PGludCo+KGMpOyAKCXN0ZDo6Y291dCA8PCAic3RlcCAiIDw8ICsraSA8PCBzdGQ6OmVuZGw7Cn0KCmludCBtYWluKCkgewoJaW50IGkgPSAwOwoJTG9vcCBjb3VudGVyKGNvdW50LCAmaSk7CgltYWtlIHN0ZDo6dmVjdG9yPExvb3A+KDEwLCBjb3VudGVyKTsKCXJldHVybiAwOwp9