#include <vector>
#include <functional>
template<class T, class... Args> class FuncList {
public:
std::vector<std::function<T(Args...)>> mFuncs;
void operator()(Args... args) {
for (auto fn : mFuncs)
fn(args...);
}
};
void mul(int x, int y) {
printf("%i\n", x * y);
}
auto add = [] (int x, int y) {printf("%i\n", x + y);};
int main() {
FuncList<void, int, int> testFncs;
testFncs.mFuncs.push_back(add);
testFncs.mFuncs.push_back(mul);
testFncs(5, 6);
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcy4uLiBBcmdzPiBjbGFzcyBGdW5jTGlzdCB7CnB1YmxpYzoKICBzdGQ6OnZlY3RvcjxzdGQ6OmZ1bmN0aW9uPFQoQXJncy4uLik+PiBtRnVuY3M7CgogIHZvaWQgb3BlcmF0b3IoKShBcmdzLi4uIGFyZ3MpIHsKICAgIGZvciAoYXV0byBmbiA6IG1GdW5jcykKICAgICAgZm4oYXJncy4uLik7CiAgfQp9OwoKdm9pZCBtdWwoaW50IHgsIGludCB5KSB7CiAgcHJpbnRmKCIlaVxuIiwgeCAqIHkpOwp9CgphdXRvIGFkZCA9IFtdIChpbnQgeCwgaW50IHkpIHtwcmludGYoIiVpXG4iLCB4ICsgeSk7fTsKCmludCBtYWluKCkgewoJRnVuY0xpc3Q8dm9pZCwgaW50LCBpbnQ+IHRlc3RGbmNzOwoJdGVzdEZuY3MubUZ1bmNzLnB1c2hfYmFjayhhZGQpOwoJdGVzdEZuY3MubUZ1bmNzLnB1c2hfYmFjayhtdWwpOwoJdGVzdEZuY3MoNSwgNik7Cn0=