Я переношу некоторый SystemVerilog на SystemC/C++ и у меня возникают проблемы с многомерным ассоциативным массивом. Рассмотрим объявление этого массива в SV.
// assume typ_one, typ_two, typ_three are struct or enum types
typ_one mda[typ_two][typ_two][typ_three];
Я знаю, что с одномерными ассоциативными массивами я могу использовать карту, а с двумерными массивами — вложенную карту, и я считаю, что аналогичный подход может решить многомерный массив, но он становится очень запутанным.
typ_one mda[typ_two];
map< typ_two, typ_one >;
typ_one mda[typ_two][typ_two];
map< typ_two, map< typ_two, typ_one > >;
typ_one mda[typ_two][typ_two][typ_three];
map< typ_two, map< typ_two, map< typ_three, typ_one > > >;
Итак, мои вопросы,
(1) правильно ли вышеизложенное в том смысле, что операция в форме mda[x][y][z]
вернет то же ожидаемое значение, что и код SV?
(2) есть ли лучший и более чистый способ?
std::tuple
для С++ 11 илиboost::tuple
в противном случае. - person andre   schedule 29.11.2012