LINUX.ORG.RU

История изменений

Исправление slovazap, (текущая версия) :

В шаблоны не учили что-ли?

#include <vector>
#include <string>
#include <iostream>
#include <algorithm>

template<typename... Args>
void pass(const Args&...) {}

template <class F, class... Args>
void multiforeach(F&& function, const Args&... args) {
    pass(std::for_each(args.begin(), args.end(), function)...);
}

int main() {
    std::vector<std::string> a = { "a1", "a2" };
    std::vector<std::string> b = { "b1", "b2" };
    std::vector<std::string> c = { "c1", "c2" };

    multiforeach([](const std::string& s){std::cerr << s << std::endl;},a, b, c, std::vector<std::string>{"d1", "d2"});

    return 0;
}

Можно и рекурсивно:

template <class F>
void multiforeach(F&&) {
}

template <class F, class C, class... More>
void multiforeach(F&& function, const C& container, const More&... more) {
    std::for_each(container.begin(), container.end(), function);
    multiforeach(function, more...);
}

Исходная версия slovazap, :

В шаблоны не учили что-ли?

#include <vector>
#include <string>
#include <iostream>
#include <algorithm>

template<typename... Args>
void pass(const Args&...) {}

template <class F, class... Args>
void multiforeach(F&& function, const Args&... args) {
    pass(std::for_each(args.begin(), args.end(), function)...);
}

int main() {
    std::vector<std::string> a = { "a1", "a2" };
    std::vector<std::string> b = { "b1", "b2" };
    std::vector<std::string> c = { "c1", "c2" };

    multiforeach([](const std::string& s){std::cerr << s << std::endl;}, a, b, c);

    return 0;
}

Можно и рекурсивно:

template <class F>
void multiforeach(F&&) {
}

template <class F, class C, class... More>
void multiforeach(F&& function, const C& container, const More&... more) {
    std::for_each(container.begin(), container.end(), function);
    multiforeach(function, more...);
}