Я пытаюсь сохранить boost::indices
в переменной. Насколько я могу судить, получается тип index_gen
. Тем не менее, index_gen
кажется шаблоном в boost::detail
, но параметры шаблона не доступны для multi_array::index_gen
, и они, по-видимому, по умолчанию равны <0,0>
, что приводит к ошибке, которую вы увидите ниже:
Я пробовал следующее:
#include "boost/multi_array.hpp"
int main()
{
typedef boost::multi_array<double, 3> array_type;
using IndexType = boost::array<array_type::index, 3>;
array_type A;
A.reshape(IndexType({{3,4,2}}));
// this works
array_type::array_view<3>::type myview =
A[ boost::indices[array_type::index_range(0,2)][array_type::index_range(1,3)][array_type::index_range(0,4)] ];
// This produces a compiler error:
array_type::index_gen test = boost::indices[array_type::index_range(0,2)][array_type::index_range(1,3)][array_type::index_range(0,4)];
}
Ошибка:
error: conversion from 'boost::detail::multi_array::index_gen<3, 3>' to non-scalar type 'boost::detail::multi_array::multi_array_base::index_gen {aka boost::detail::multi_array::index_gen<0, 0>}' requested
array_type::index_gen test = boost::indices[array_type::index_range(0,2)][array_type::index_range(1,3)][array_type::index_range(0,4)];
Любые мысли о том, как сохранить этот индексный объект?
boost::detail::multi_array::index_gen<3,3> test = boost::indices[array_type::index_range(0,2)][array_type::index_range(1,3)][array_type::index_range(0,4)];
, но кажется странным использовать что-то из пространства именdetail
? - person David Doria   schedule 23.02.2016array_type::index_gen<3,3> indices2 = boost::indices[array_type::index_range(0,2)][array_type::index_range(1,3)][array_type::index_range(0,4)];
я получаюerror: 'boost::detail::multi_array::multi_array_base::index_gen {aka boost::detail::multi_array::index_gen<0, 0>}' is not a template array_type::index_gen<3,3> indices2 = boost::indices[array_type::index_range(0,2)][array_type::index_range(1,3)][array_type::index_range(0,4)]; ^
- person David Doria   schedule 25.02.2016index_gen
определен вboost::detail::multi_array
.index_gen
вboost::multi_array
— это отtypedef
доboost::detail::multi_array::index_gen<0,0>
(в multi_array/base.hpp). Мне непонятно почему. Может стоит еще вопрос. - person Antonio   schedule 25.02.2016