Boost logo

Boost :

From: Vincent Bhérer-Roy (vbr.boost_at_[hidden])
Date: 2006-05-24 23:30:07


Sorry for the bad subject line...

On 24-May-06, at 12:12, Vincent Bherer-Roy wrote:

> I know that this subject has been discuss a lot in the past.
> However a quick search in the mailing list archive did not show any
> solution like the one I propose. If my post is a duplicate, please
> forgive :-)
>
> The problem is that, like many other, I don't use boost::array
> because it doesn't have any constructor.
>
> First, be aware that I want to start a flame war ;-) I understand
> well the rationale for the aggregate initialization support. I also
> understand that we want a lightweight wrapper around C arrays. I
> agree there is a consensus around this and I don't want to break
> it. However, I have a simple (I think) solution that should give us
> the best of both worlds.
>
> Basically, the idea is to have a third parameter to the template,
> it is set to false by default in order to provide the same default
> behaviour. So we have:
>
> template<class T, std::size_t N, bool C = false> class array { /*
> current implementation */ };
> template<class T, std::size_t N> class array<T, N, true> : public
> array<T,N,false> { /* adds constructors only */ };
>
> array<int, 3> a1 = { 1, 2, 3 };
> array<int, 3, false> a2 = { 1, 2, 3 };
> array<int, 3, true> a3;
> array<int, 3, true> a4( 1 ); // assign 1 to all three values
> array<int, 3, true> a5( 1, 2, 3 );
> array<int, 3, true> a6( 1, 2 ); // raises a static assert
> because we try to put only two values in an array of 3
> array<int, 3, true> a7( 1, 2, 3, 4 ); // also raises a static
> assert because we try to put four values in an array of 3
>
> I only see one main drawback with this technique, we'll have some
> problems with compilers lacking partial specialization support.
>
> So the idea is in your hands. I hope it will have some echoes.
>
> I attached the modified array.hpp file. It compiles for me on
> Visual Studio .Net 2003 and 2005 with boost 1.33.1. However I
> didn't make full test coverage.
>
> Thanks
>
> Vincent Bherer-Roy
>
>
> <array.hpp>


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk