c ++ 11:从模板函数构建std :: tuple

Tay*_*lor 6 c++ variadic-templates c++11

我有以下功能:

template<class T>
T Check(int index);
Run Code Online (Sandbox Code Playgroud)

我如何编写一个函数,在CheckTuple给定元组类型的情况下,通过调用来填充元组Check

例如:

CheckTuple< std::tuple<int, float, std::string> >()
Run Code Online (Sandbox Code Playgroud)

将返回以下元组:

std::make_tuple( Check<int>(1), Check<float>(2), Check<std::string>(3) )
Run Code Online (Sandbox Code Playgroud)

我看到的其他问题涉及解压缩给定元组,而不是以这种方式构建一个元组.

Pra*_*ian 4

使用 C++14 的integer_sequence. 如果您没有可用的,这里有Jonathan Wakely编写的C++11 实现

template<typename Tuple, int... I>
Tuple CallCheck(std::integer_sequence<int, I...>)
{
    return std::make_tuple(Check<typename std::tuple_element<I, Tuple>::type>(I)...);
}

template<typename Tuple>
Tuple CheckTuple()
{
    return CallCheck<Tuple>(std::make_integer_sequence<int, std::tuple_size<Tuple>::value>());
}

// Use it as 
auto tup = CheckTuple<std::tuple<int, float, std::string>>();
Run Code Online (Sandbox Code Playgroud)

现场演示