The documentation mentions:
template gen_type<Ranges>::type
- This type generator is used to specify the result of
Ranges
chained calls to extent_gen::operator[]
.
where gen_type
is a member of boost::multi_array_types::extent_gen
(and boost::multi_array_types::extent_gen
is also the type of the global helper object boost::extents
).
You can also see that constructors which accept a set of extents are specified in this way (at least for purposes of public documentation). For example,
namespace boost {
template <typename ValueType,
std::size_t NumDims,
typename Allocator = std::allocator<ValueType> >
class multi_array {
...
typedef multi_array_types::extent_gen extent_gen;
...
explicit multi_array(extent_gen::gen_type<NumDims>::type ranges,
const storage_order_type& store = c_storage_order(),
const Allocator& alloc = Allocator());
So you could rewrite that line of your code without using auto
as:
boost::multi_array_types::extent_gen::gen_type<3>::type my_shape =
boost::extents[3][4][5];
This is a bit silly for a local variable, but maybe you want to store a set of extents in a class or something like that. If so, this is the way to do it according to the officially documented interface.
(As noted in comments, the actual type this typedef resolves to involves boost::internal::
, but you should never use anything from an "internal" namespace in your code, because that is subject to change in future versions.)