c++ - para - how to use enum
Inicializar una matriz std:: bidimensional de tipo clase enum(C++ 11) (2)
Esto se puede hacer con un bucle for basado en rangos y la función std::array::fill
member.
MyTable(EntryType value)
{
for (auto& row : _table) {
row.fill(value);
}
}
Esto continuará funcionando incluso si cambia las dimensiones de la matriz.
Tengo la siguiente clase en C ++ 11:
class MyTable
{
public:
enum class EntryType
{
USED, FREE
};
MyTable(EntryType value)
{
for (uint32_t i = 0; i < 10; ++i)
{
memset(_table[i].data(), (int)value, sizeof(_table[0][0]) * 50);
}
}
array<array<EntryType, 50>, 10> _table;
}
Tratando de construir un objeto de MyTable con el valor de EntryType :: FREE, cada elemento de la matriz bidimensional tiene el valor de 0x01010101 (1b cada 8 bits), en lugar del valor esperado de solo 0x1.
Supongo que tiene algo que ver con que mi value
se transfiera a int
, pero no sé qué se supone que debo hacer para solucionarlo.
memset()
se espera que funcione de esa manera, ya que es
establece cada byte del búfer de destino al valor especificado.
Lea más en ¿Por qué memset () inicializa incorrectamente int?
Sin embargo, tenga cuidado, ya que como dijo juanchopanza, std::array
puede tener relleno al final (lea más en std :: alineación de matriz ), lo que significa que este enfoque podría fallar.
Como se trata de una matriz 2D, puede usar un bucle basado en rangos y std::array::fill
, como este:
for(auto& row : _table)
row.fill(value);
como dijo renzo.
En caso de que no desee configurar cada fila al mismo valor, puede hacerlo así, por supuesto:
for(auto &row : array)
for(auto &col : row)
col = value;
Obtenga más información en el rango para una matriz multidimensional .