我设法将template<int ...Args> struct List
转换为integral_constant
的列表,但是,是否可以将integral_constant
转换回{{ 1}} S'
以下是我如何从int
转换为IntList
:
List
答案 0 :(得分:2)
您可以通过让编译器匹配模板模式来执行您想要的操作:
template<typename... Ts>
auto to_int_list_helper(List<Ts...>) {
return IntList<Ts::value...>{};
}
template<typename ListParam>
using AsIntList = decltype(to_int_list_helper(ListParam{}));
和概念证明:
using L = typename IntList<1,2>::asList;
static_assert(is_same<L, List<integral_constant<int, 1>, integral_constant<int, 2>>>::value, "");
using BackToIntList = AsIntList<L>;
static_assert(is_same<IntList<1,2>, BackToIntList>::value, "");
由于您还询问了串联问题,因此使用相同的技术非常简单:
template<int... Ts, int... Us>
auto concat_int_lists_helper(IntList<Ts...>, IntList<Us...>) {
return IntList<Ts..., Us...>{};
}
template<typename A, typename B>
using ConcatIntLists = decltype(concat_int_lists_helper(A{}, B{}));