tuple example create c++ templates c++11 variadic-templates compile-time-constant

create - tuple c++ example



¿Por qué es legal std:: make_tuple(7+N...) en C++ 11? (1)

El siguiente código es legal en C ++ 11.

template<int... N> std::tuple<decltype(N)...> f() { return std::make_tuple(7 + N...); }

Qué significa eso?


En primer lugar, observe los parámetros de la plantilla: template <int ... N> . Aunque se puede dar un número variable de argumentos de plantilla a f , todos ellos deben ser del tipo int .

Ahora, cuando usa f<t1, t2, ..., tn> , el desempaquetado de parámetros (7 + N...) seguirá el patrón 7 + N y se expandirá a

7 + t1, 7 + t2, 7 + t3, ..., 7 + tn

Por lo tanto, terminas con una tupla que contiene cada uno de los argumentos de tu plantilla incrementada en siete. Los detalles se pueden encontrar en la sección 14.5.3 Plantillas Variadic [temp.variadic].

3. Una expansión de paquete consiste en un patrón y una elipsis, cuya creación de instancia produce cero o más instancias del patrón en una lista [...].