我正在尝试折叠参数包N
不同类型分为std::tuple
of N-1
std::pairs
与各自的类型。
例如表达式
ResolveToTupleOfPairs<void, int, long>::Type tuple;
应该评估为
std::tuple<std::pair<void, int>, std::pair<int, long>> tuple;
所以我正在寻找一个实现ResolveToTupleOfPairs
键入以按说明折叠参数包。我当前的实现如下,但显然它会导致类型成为一个对的元组,每个对都保存相同的类型两次,而不是<T0, T1>, <T1, T2>, ...
.
template<typename... T>
struct ResolveToTupleOfPairs {
static_assert(sizeof...(Args) > 1, "need at least two arguments");
using Type = std::tuple<std::pair<T, T>...>;
};
我很好c++17
解决方案。
我们利用参数包扩展非常非常智能的事实
template<typename...>
struct fold;
template<size_t... Is, typename... Ts>
struct fold<std::index_sequence<Is...>, Ts...>
{
using tuple = std::tuple<Ts...>;
using type = std::tuple<std::pair<std::tuple_element_t<Is, tuple>,
std::tuple_element_t<Is + 1, tuple>>...>;
};
template<typename... Ts>
using fold_t = typename fold<std::make_index_sequence<sizeof...(Ts) - 1>, Ts...>::type;
Live https://godbolt.org/g/QiswDc
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)