On Mon, Oct 20, 2008 at 8:37 PM, todd keeler <tkeeler@sfu.ca> wrote:
Hi,  I'd like to understand how the Boost Multi-array implements multiple indexing using the regular square bracket operator.

I've waded through the template code for a few hours,  from what I understand, there's a nested bunch of sub-arrays which leads to a final object which offers a reference into the data array.

I still can't figure out, however, how it solves this problem:

Consider a Multi-Array  A with dimension 3,
Calling A[ i ][ j ][ k ]
requires a call to

A[ i ]  which returns a Subarray, S1

The subarray gets indexed
S1[ j ] and another subarray S2 is returned.

however S2[k]  doesn't return a subarray, but a
reference to the data in the multiarray.

However,  S1 and S2 are the same object (subarray),  hence require the same overloaded operator, returning the same type.
making this unfeasible.

Therefore,  the only way I can think to eliminate this dilemma is to have a different object type for every dimension.  I'm not sure if this is what Multi-array does, but I'd sure like to know how it's done .


The subarrays S1 & S2 are instantiations of the same template, but with different instantiation parameters (ie.,
the dimensionality of the subarray), and so are different types, for which overload resolution works in the
normal way.

Regards, Rob.