Это довольно просто в C ++ 20:
#include <iostream>
#include <tuple>
template<typename T>
void func(T t)
{
std::cout << t << std::endl;
}
int main()
{
std::tuple<int,float,double> f{1,2,3};
std::apply([]<typename ...Args>(Args && ...args)
{
(func(args), ...);
}, f);
}
Это требует немного больше работы, чтобы поддерживать только C ++ 11 или выше:
#include <iostream>
#include <tuple>
#include <utility>
template<typename T>
void func(T t)
{
std::cout << t << std::endl;
}
template<typename T, size_t s, size_t n=0>
struct call_func {
static void doit(T &t)
{
func(std::get<n>(t));
call_func<T, s, n+1>::doit(t);
}
};
template<typename T, size_t s>
struct call_func<T, s, s> {
static void doit(T &t)
{
}
};
template<typename ...Args>
void do_callfunc(std::tuple<Args...> &t)
{
call_func<std::tuple<Args...>, sizeof...(Args), 0>::doit(t);
}
int main()
{
std::tuple<int,float,double> f{1,2,3};
do_callfunc(f);
}