textual teoria sobre sistemico michael linguistica lenguaje interpersonal ideativa halliday funcional funcion ejemplos ejemplo analisis c++ arrays templates boost sizeof

c++ - teoria - michael halliday



La metafunción del tamaño de la matriz: ¿está aumentando en alguna parte? (4)

Encontré la siguiente plantilla en un blog :

template <typename T, size_t N> struct array_info<T[N]> { typedef T type; enum { size = N }; };

Es una alternativa elegante a sizeof(a) / sizeof(a[0]) .

Una construcción comúnmente utilizada para obtener el tamaño de una matriz seguramente debería estar en algún lugar de una biblioteca. No estoy al tanto de uno. ¿Alguien puede decirme que esta funcionalidad está en las bibliotecas estándar en algún lugar y / o en Boost? Preferiblemente en una forma ligera y fácil de usar.


En el nuevo estándar de C ++, std :: array del encabezado tiene el método size (), que devuelve un constexpr y, por lo tanto, está disponible en tiempo de compilación.

Deberías ser capaz de hacer algo como

std::array< YourType, N > arr; constexpr auto totalSize = arr.size() * sizeof( std::array< YourType, N >::value_type );

Espero que esto ayude...


Finalmente encontré la respuesta yo mismo - boost::size() :

#include <boost/range.hpp> int array[10]; boost::size(array); // returns 10


Si es posible, también recomendaría std::array o boost::array si es posible. Dicho esto, también puede usar boost :: extent para obtener los tamaños de matriz e impulsar :: remove_all_extents para obtener el tipo real.

En c ++ 11, los rasgos de tipo también están disponibles en la biblioteca estándar.

Editar: si busca una función que opere con variables, en lugar de tipos, intente lo siguiente

template <typename T, std::size_t N> std::size_t array_count(const T(&) [N]) { return N; }

Vea un ejemplo de uso en http://ideone.com/IOdfp