
On Fri, Oct 15, 2010 at 13:04, Gerardo Hernandez <g.hernandez@indizen.com> wrote:
I see the point. But I do not understand the advantage of using a single underlying type instead of two (which I presume was also Thorsten idea).
It's the same advantage as using the same underlying type for ptr_vector<int> and ptr_vector<string>: instantiating less code.
Using always void* would not only require a lot of const_cast when returning data from the containers
Not a big deal, since it already has to static_cast everywhere when returning data from the containers.
but also think that ptr_vector<T>::iterator must be of different type as ptr_vector<const T>::iterator, as:
boost::ptr_vector<const int> v; v.push_back(new int); (*v.begin()) = 2;
shall also be compiler error, as the container contains const elements.
Again, ptr_vector<int> and ptr_vector<string> also need different iterators, despite using the same underlying type, so ptr_vector<int> and ptr_vector<const int> will have different iterator types as well, even though they'd both wrap the same internal iterator type. And just like above, they'll just need to const_cast in addition to the static_casts that are already there. ~ Scott