Boost logo

Boost :

From: Reece Dunn (msclrhd_at_[hidden])
Date: 2005-05-13 08:05:52


Martin wrote:
>Wouldn't the flex_string be even more flexible if it accepted ranges in
>constructor, assignment etc.
>(same for fixed_string, const_string of course)

This is true. However, this may result in undesired behaviour. For example:

template< typename String >
void foo( String & str, const std::vector< typename String::char_type > &
vec )
{
   str.assign( vec ); // uses assign( const RangeT & range )
}

int main()
{
   flex_string< char, SomeStringType > str1;
   std::string str2;
   std::vector< char > vec; // = "Meine Welt!"

   foo( str1, vec ); // ok: str1 = "Meine Welt!"
   foo( str2, vec ); // error - std::string does not have assign( const
std::vector< char > & )!
}

This may change in either a TR or the next standard if/when ranges are added
and incorporated into std::basic_string.

>Then you could easily switch between different string types without the
>.c_str
>()

This deepnds on whether begin(input), etc. would detect that flex_string has
begin()/end() defined. Of course, the logic could be added to the begin(
RangeT ) and end( RangeT ) definitions.

>template <class RangeT>
>flex_string(const RangeT& input, const A& a = A())
>: Storage(a)
>{
> assign(begin(input), end(input));

Couldn't this be assign( input ), since assing would have a RangeT variant.

>}

Regards,
Reece Haston Dunn
Software Engineer, Sophos

Web: www.sophos.com
Sophos - protecting businesses against viruses and spam


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