#include <iostream>
#include <vector>
using namespace std;
typedef vector<void (*)(void)> FooVector;
void foo1()
{ cout << "foo1 called" << endl; }
void foo2()
{ cout << "foo2 called" << endl; }
void foo3()
{ cout << "foo3 called" << endl; }
void process(const FooVector &v)
{
for (size_t i = 0; i < v.size(); i++) {
cout << "calling function number " << i << endl;
v[i]();
}
}
int main()
{
FooVector v;
v.push_back(foo1);
v.push_back(foo2);
v.push_back(foo3);
process(v);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgdmVjdG9yPHZvaWQgKCopKHZvaWQpPiBGb29WZWN0b3I7Cgp2b2lkIGZvbzEoKQp7IGNvdXQgPDwgImZvbzEgY2FsbGVkIiA8PCBlbmRsOyB9Cgp2b2lkIGZvbzIoKQp7IGNvdXQgPDwgImZvbzIgY2FsbGVkIiA8PCBlbmRsOyB9Cgp2b2lkIGZvbzMoKQp7IGNvdXQgPDwgImZvbzMgY2FsbGVkIiA8PCBlbmRsOyB9Cgp2b2lkIHByb2Nlc3MoY29uc3QgRm9vVmVjdG9yICZ2KQp7Cglmb3IgKHNpemVfdCBpID0gMDsgaSA8IHYuc2l6ZSgpOyBpKyspIHsKCQljb3V0IDw8ICJjYWxsaW5nIGZ1bmN0aW9uIG51bWJlciAiIDw8IGkgPDwgZW5kbDsKCQl2W2ldKCk7Cgl9Cn0KCmludCBtYWluKCkKewoJRm9vVmVjdG9yIHY7Cgl2LnB1c2hfYmFjayhmb28xKTsKCXYucHVzaF9iYWNrKGZvbzIpOwoJdi5wdXNoX2JhY2soZm9vMyk7Cglwcm9jZXNzKHYpOwoJcmV0dXJuIDA7Cn0=