#include <iostream>
void f1() { std::cout << "do f1\n"; }
void f2() { std::cout << "do f2\n"; }
void f3() { std::cout << "do f3\n"; }
using func_t = void (*)();
using func_p = func_t*;
int main()
{
const int amountOfFunctions = 3;
std::cout << "static\n";
//void (*functions_1[amountOfFunctions])() = { f1, f2, f3 };
func_t functions_1[] = { f1, f2, f3 };
for (size_t i = 0; i < amountOfFunctions; ++i) {
functions_1[i]();
}
std::cout << "\ndynamic\n";
//func_t* functions_2 = new func_t[amountOfFunctions]{f1, f2, f3};
void(**functions_2)() = new (void(*[amountOfFunctions])()){ f1, f2, f3 };
for (size_t i = 0; i < amountOfFunctions; ++i) {
functions_2[i]();
}
delete[] functions_2;
std::cout << "\n\n press [Enter]...";
std::cin.get();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdm9pZCBmMSgpIHsgc3RkOjpjb3V0IDw8ICJkbyBmMVxuIjsgfQp2b2lkIGYyKCkgeyBzdGQ6OmNvdXQgPDwgImRvIGYyXG4iOyB9CnZvaWQgZjMoKSB7IHN0ZDo6Y291dCA8PCAiZG8gZjNcbiI7IH0KCnVzaW5nIGZ1bmNfdCA9IHZvaWQgKCopKCk7CnVzaW5nIGZ1bmNfcCA9IGZ1bmNfdCo7CgppbnQgbWFpbigpCnsKICAgIGNvbnN0IGludCBhbW91bnRPZkZ1bmN0aW9ucyA9IDM7CgogICAgc3RkOjpjb3V0IDw8ICJzdGF0aWNcbiI7CiAgICAvL3ZvaWQgKCpmdW5jdGlvbnNfMVthbW91bnRPZkZ1bmN0aW9uc10pKCkgPSB7IGYxLCBmMiwgZjMgfTsKICAgIGZ1bmNfdCBmdW5jdGlvbnNfMVtdID0geyBmMSwgZjIsIGYzIH07CiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFtb3VudE9mRnVuY3Rpb25zOyArK2kpIHsKICAgICAgICBmdW5jdGlvbnNfMVtpXSgpOwogICAgfQoKICAgIHN0ZDo6Y291dCA8PCAiXG5keW5hbWljXG4iOwogICAgLy9mdW5jX3QqIGZ1bmN0aW9uc18yID0gbmV3IGZ1bmNfdFthbW91bnRPZkZ1bmN0aW9uc117ZjEsIGYyLCBmM307CiAgICB2b2lkKCoqZnVuY3Rpb25zXzIpKCkgPSBuZXcgKHZvaWQoKlthbW91bnRPZkZ1bmN0aW9uc10pKCkpeyBmMSwgZjIsIGYzIH07CiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFtb3VudE9mRnVuY3Rpb25zOyArK2kpIHsKICAgICAgICBmdW5jdGlvbnNfMltpXSgpOwogICAgfQogICAgZGVsZXRlW10gZnVuY3Rpb25zXzI7CgogICAgc3RkOjpjb3V0IDw8ICJcblxuICAgcHJlc3MgW0VudGVyXS4uLiI7CiAgICBzdGQ6OmNpbi5nZXQoKTsKfQo=