|
Boost : |
Subject: [boost] Boost house style?
From: Robert Jones (robertgbjones_at_[hidden])
Date: 2008-10-16 09:29:07
I've been looking at the implementation of Boost.multi_array, and in
particular the mechanics of generating the array extents objects.
The problem to be solved is to allow the extent of a multi-dimensional
array to be specified with this syntax
extents[2][3][4]
since this forms a nice nmemonic. The solution is a templated type
template <unsigned ndims> class extents_type {.....};
which contains a subscripting operator which returns its own
object with an extra subscript tacked-on
extents_type<ndims+1> operator[]( unsigned n ) {....}
OK. That's all fairly straight-forward. The interesting bit is the
specialisation
required for the initial dimensionless object. The Boost implementation
goes through several intermediate objects which eventually resolve to
a boost::array<unsigned, ndims> in general, or a boost::array<unsigned, 1>
for the dimensionless case.
My questions about this are:
* why boost::array<unsigned, 1> rather than boost::array<unsigned, 0>?
Obviously
an array of zero elements is an odd beast, but it seems to work, with
begin() equal
to end() as you'd expect.
* is it necessary to employ so many different objects to resolve the special
case?
Is this an aspect of the Boost style guidlelines, or simply some C++ good
practise
that I've missed?
The existing implementation of this is in boost/multi_array/range_list.hpp
if you're
interested.
Thanks, Rob.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk