/* La primera idea que se me vino a la mente para http://channel9.msdn.com/Events/GoingNative/2013/The-Way-of-the-Exploding-Tuple No recomendaria su uso, pero es otra forma de atacar al reto. */ #include #include #include #include template struct stat_seq { }; template struct stat_seq_builder; template struct stat_seq_builder<0, Nums...> { typedef stat_seq<0, Nums...> type; }; template struct stat_seq_builder : stat_seq_builder { }; template auto explode_helper(Func&& f, const std::tuple& tup, stat_seq) -> typename std::result_of::type { return f(std::get(tup)...); } template auto explode(Func&& f, const std::tuple& tup) -> typename std::result_of::type { return explode_helper(std::forward(f), tup, typename stat_seq_builder::type()); } int f(int a, double b, const char* c) { return a + (int)b + std::strlen(c); } int main() { auto t1 = std::make_tuple(1, 4.2, "hello"); std::cout << explode(f, t1) << std::endl; }