vectores tipos referencia punteros por paso pasar parametros matriz funciones ejercicios con como arreglos c++ c++11 variadic-templates variadic-functions

c++ - tipos - punteros como parametros de funciones en c



C++ 11: ¿Número de parámetros de funciones de plantillas variables? (1)

¿Cómo puedo obtener un recuento de la cantidad de argumentos para una función de plantilla variadic?

es decir:

template<typename... T> void f(const T&... t) { int n = number_of_args(t); ... }

¿Cuál es la mejor manera de implementar number_of_args en lo anterior?


Solo escribe esto:

const int n = sizeof...(T); //you may use `constexpr` instead of `const`

Tenga en cuenta que n es una expresión constante (es decir, conocida en tiempo de compilación), lo que significa que puede usarla cuando se necesite una expresión constante, como por ejemplo:

std::array<int, n> a; //array of n elements std::array<int, 2*n> b; //array of (2*n) elements auto middle = std::get<n/2>(tupleInstance);

Tenga en cuenta que si desea calcular el tamaño agregado de los tipos empaquetados (a diferencia del número de tipos en el paquete), entonces debe hacer algo como esto:

template<std::size_t ...> struct add_all : std::integral_constant< std::size_t,0 > {}; template<std::size_t X, std::size_t ... Xs> struct add_all<X,Xs...> : std::integral_constant< std::size_t, X + add_all<Xs...>::value > {};

entonces haz esto:

constexpr auto size = add_all< sizeof(T)... >::value;

En C ++ 17 (y posterior), calcular la suma del tamaño de los tipos es mucho más simple usando la expresión de fold :

constexpr auto size = (sizeof(T) + ...);

Espero que ayude.