Учитывая, например, N
определенные пользователем типы, я бы хотел, чтобы функция возвращала std::tuple
длины N
, где каждый элемент создается с помощью вызова функции некоторой функции (примером которой является func
ниже) :
#include <tuple>
#include <utility>
template <typename T>
T func(int x)
{
return T();
}
template<typename... T, std::size_t... I>
std::tuple<T...> build_tuple()
{
// How do I write this in a generic way?
return std::make_tuple(
func<std::string>(0),
func<int>(1),
func<int>(2)
);
// This won't work, obviously
// return std::make_tuple(func<T...>(I...));
}
int main()
{
build_tuple<std::string, int, int>();
}
По сути, мой вопрос заключается в том, как мне распаковать аргументы, чтобы получить что-то вроде «type0, 0», «type1, 1» и т. Д. Вместо «type0, type1, ..., 0, 1,. .. ", если это имеет смысл.
Это похоже на общую проблему, есть ли идиоматическое решение?