Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <tuple>
- template <int... Is>
- struct seq
- {
- };
- template <int N, int... Is>
- struct gens : gens<N - 1, N - 1, Is...>
- {
- };
- template <int... Is>
- struct gens<0, Is...> : seq<Is...>
- {
- };
- template <int N, typename ... Args, int... S>
- void _foo(const std::tuple<Args...>& t, seq<S...>)
- {
- auto&& f = std::get<N>(t);
- f(std::get<S>(t)...);
- }
- template <typename ... Args>
- void foo(Args&& ... args)
- {
- _foo<sizeof...(Args)-1>(std::make_tuple(std::forward<Args>(args)...), gens<sizeof...(Args)-1>{});
- }
- int main()
- {
- foo(1, 2, 3, [](auto a, auto b, auto c)
- {
- std::cout << "a= " << a << std::endl;
- std::cout << "b= " << b << std::endl;
- std::cout << "c= " << c << std::endl;
- });
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement