biblioteca array c++
Obtener el tamaƱo de std:: array sin una instancia (6)
A pesar de la buena respuesta de @ Jarod42, aquí hay otra solución posible basada en decltype
que no usa tuple_size
.
Sigue un ejemplo de trabajo mínimo que funciona en C ++ 11:
#include<array>
struct Foo {
std::array<int, 8> bar;
};
int main() {
constexpr std::size_t N = decltype(Foo::bar){}.size();
static_assert(N == 8, "!");
}
std::array
ya tiene una función miembro constexpr llamada size
que devuelve el valor que está buscando.
Teniendo en cuenta esta estructura:
struct Foo {
std::array<int, 8> bar;
};
¿Cómo puedo obtener el número de elementos de la matriz de bar
si no tengo una instancia de Foo
?
Podrías darle a Foo
un miembro public static constexpr
.
struct Foo {
static constexpr std::size_t bar_size = 8;
std::array<int, bar_size> bar;
}
Ahora sabe el tamaño de la barra de Foo::bar_size
y tiene la flexibilidad adicional de nombrar a bar_size
como algo más descriptivo si Foo
alguna vez tiene varios arreglos del mismo tamaño.
Podrías hacer lo mismo que para arreglos heredados:
sizeof(Foo::bar) / sizeof(Foo::bar[0])
Puedes usar std::tuple_size
:
std::tuple_size<decltype(Foo::bar)>::value
Se puede utilizar como:
sizeof Foo().bar
Utilizar:
sizeof(Foo::bar) / sizeof(int)