Как вы назначаете boost::indices в переменной?

Я пытаюсь сохранить 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)];

Любые мысли о том, как сохранить этот индексный объект?


person David Doria    schedule 22.02.2016    source источник
comment
Кажется, это работает: 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.2016
comment
@Antonio С этим: 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)]; я получаю 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.2016
comment
Действительно правильный index_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
comment
@Antonio Опубликовано: stackoverflow.com/questions/35633531/   -  person David Doria    schedule 25.02.2016