Я хотел бы инициализировать boost::multi_array, встроенный в какой-то код. Но я не думаю, что boost::multi_array поддерживает инициализацию из списка инициализаторов. Вот что у меня есть до сих пор:
// First create a primitive array, which can be directly initialized
uint8_t field_primitive[4][8] = {
{ 1,1,1,1,1,1,1,1 },
{ 1,2,1,2,1,2,1,2 },
{ 1,1,2,2,2,2,2,2 },
{ 1,2,2,2,2,2,2,2 }
};
// Create the boost::multi_array I actually want to use
boost::multi_array<uint8_t, 2> field(boost::extents[4][8]);
// Compact but yucky approach to copying the primitive array contents into the multi_array.
memcpy(field.data(), field_primitive, field.num_elements() * sizeof(uint8_t));
Мне нравится, что я могу компактно выразить содержимое матрицы, используя список инициализаторов в фигурных скобках. Но мне не нравится «memcpy», и мне не нравится использование одноразового примитивного массива. Есть ли более приятный способ заполнить мой boost::multi_array из читаемого встроенного набора значений в коде?
origin()
иmemcpy
: theboostcppplibraries.com/boost.multiarray - person Stephan Lechner   schedule 17.01.2017memcpy
, подразумевает, что мое решение может быть лучшим. Я не уверен насчетorigin()
иdata()
. - person Christopher Bruns   schedule 17.01.2017create_multi_array<uint8_t, 2>(extents[4][8], { { 1, 1, ... }, ... })
)? К сожалению, Boost.MultiArray не был обновлен с поддержкойinitializer_list
. - person Travis Gockel   schedule 17.01.2017data()
илиorigin()
. - person Stephan Lechner   schedule 17.01.2017data()
. Я добавил эти мысли к ответу; может быть, вы можете просмотреть эти мысли. - person Stephan Lechner   schedule 17.01.2017