Это следующий код:Инициализация статического 2D массив
enum Type {Prince, Princess, King, Queen, NumTypes};
enum Country {England, Belgium, Netherlands, NumCountries};
class Factory {
static const std::array<std::array<int, NumTypes>, NumCountries> probabilities;
static std::array<std::array<int, NumTypes>, NumCountries> initializeProbabilities() {
std::array<std::array<int, NumTypes>, NumCountries> p;
p[England] = {29, 60, 80, 100};
p[Belgium] = {31, 66, 81, 100};
p[Netherlands] = {25, 45, 90, 100};
return p;
}
};
const std::array<std::array<int, NumTypes>, NumCountries> Factory::probabilities = initializeProbabilities();
является безопасным, если я когда-либо изменить порядок элементов в перечислениях страны, но это не безопасно из любого будущего изменения порядка перечисление типа элементов. Каков наилучший способ избежать этой проблемы без инициализации всех 12 элементов один за другим?
Вы можете использовать карту ... – Brian
@ Брайан. Но разве это не просто назначение всех 12 элементов один за другим? Разве нет способа сделать это, не назначая каждый элемент отдельно? Представьте, что матрица равна 12 на 30! – prestokeys
Если у вас есть поддержка C++ 11 (что вы, очевидно, делаете, учитывая 'std :: array'), вы можете инициализировать карты с помощью бит-init-lists. – Brian