#include <vector>
#include <iostream>

template<typename Delegates, typename Function, typename... Args>
void callOnAll(Delegates delegates, Function f, Args... args) {
    for (int i = 0; i < delegates.size(); i++)
        f(delegates[i], args...);
}

struct Delegate {
    int x;
    Delegate(int x) : x(x) {}
    void doSomething(int foo) {
        std::cout << "doSomething(" << foo << ") on Delegate(" << x << ")" << std::endl;
    }
};

int main()
{
    std::vector<Delegate*> delegates;
    delegates.push_back(new Delegate(1));
    delegates.push_back(new Delegate(2));
    delegates.push_back(new Delegate(3));
    callOnAll(delegates, std::mem_fun<void,Delegate>(&Delegate::doSomething), 42);
}