
Peter Myerscough-Jackopson wrote:
Dear all,
In using boost::array I have felt the need to pass around boost::array's of an unknown size (unknown to the function receiving the array). I have therefore created an abstract base class for boost::array so that I can create a pointer to a common base class for arrays of different sizes. [...]
Have you read the Boost.Array design rationale? http://www.boost.org/doc/libs/1_42_0/doc/html/array/rationale.html In any case, I'd imagine an abstract base class for boost::array would not be well-received. I consider boost::array as basically just an as-simple-as possible "copy constructible C-array". Anything more complex is something different than boost::array. If you want a uniform, size-independent interface for receiving boost::array parameters, you can use something like the following: template< class It > void foo(boost::iterator_range< It > r) { ... } template< class T, std::size_t N > void foo(boost::array<T,N>& a) { foo(boost::make_iterator_range(a)); } See the Boost.Range documentation: http://www.boost.org/doc/libs/1_42_0/libs/range/doc/utility_class.html#iter_...
Since, I think, the ability to allow boost::array to be used in this way is that it requires the use of virtual functions, I have written it so that the inheritance is optional. It is enabled with a #define before including array.hpp .
Using the preprocessor to achieve a policy decision such as this is probably less preferable compared to using a template parameter. - Jeff