如何获取整数参数包中的第i个整数?

use*_*020 3 c++ variadic-templates c++11

如何获取整数参数包中的第i个整数?例如

template<int... Is>
struct A
{
    enum { CONSTANT_0 = Is[0] }; //Assume the sizeof...(Is) > the index requested
};
Run Code Online (Sandbox Code Playgroud)

iav*_*avr 6

像那样:

template <size_t I, int N, int... R>
struct pick : pick <I - 1, R...> { };

template <int N, int... R>
struct pick <0, N, R...> : std::integral_constant <int, N> { };
Run Code Online (Sandbox Code Playgroud)

以便

pick <3, 1, 2, 3, 4, 5, 6>::value
Run Code Online (Sandbox Code Playgroud)

等于4,和

template<int... Is>
struct A
{
    enum { CONSTANT_0 = pick <0, Is...>::value };
};
Run Code Online (Sandbox Code Playgroud)

是你如何在你的情况下使用它.


其他方式:

template <size_t I, int... N>
using pick = typename std::tuple_element <I,
   std::tuple <std::integral_constant <int, N>...>
>::type;
Run Code Online (Sandbox Code Playgroud)

  • @ user1899020这是一个很好的问题.就像*为什么我必须使用索引技巧来提取元组元素并将它们传递给一个可变函数?* (2认同)