#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;
}