$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Andy Little (andy_at_[hidden])
Date: 2006-01-30 07:44:53
"Reece Dunn" <msclrhd_at_[hidden]> wrote
> Andy Little wrote:
>>The other surprise for me is that its possible to modify the capacity of a
>>fixed_string.
>
> Are you sure? You can write algorithms that don't rely on a specific
> capacity string.
OK I was under the impression you could (modify the capacity). Spell it out for 
me in the documentation in this case.
> Thus, instead of:
>
>   template< int n >
>   int strlen( const fixed_string< n, char >& str )
>   {
>      return str.length();
>   }
>
> you can write:
>
>   int strlen( const fixed_string_base< char >& str )
>   {
>      return str.length();
>   }
Its possible to do this for fixed_string directly too.
#include <boost/fixed_string/fixed_string.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/utility/enable_if.hpp>
#include <string>
namespace boost{
    template <typename T>
    struct is_fixed_string : mpl::false_{};
    template <int N, typename C, typename P1, typename P2>
    struct is_fixed_string<fixed_string<N,C,P1,P2> > : mpl::true_{};
    template <typename T>
    typename boost::enable_if<
        is_fixed_string<T>,
        int
    >::type
    strlen( const T& str )
    {
      return str.length();
    }
}
int main()
{
    // check doesnt interfere here
    const char arr[]= "hello";
    std::cout << strlen(arr) <<'\n';
    boost::fixed_string<20> str = "hello";
    std::cout << strlen(str);
    int n =9;
    //  std::cout << strlen(n); //error because not a fixed_string or char array
  }
>
>>That means the class name fixed_string is misleading. Unless fixed
>>means 'not  broken' string implying that std::string is flawed.
>
> The std::string interface has several flaws, such as it having too many
> methods (see Herb Sutter's comments on this topic) and string types that
> have different CharTraits not being compatible with each other. However,
> fixed_string does not attempt to fix these. It is short for "fixed capacity
> string".
>
>>Its that sense
>>in which it  doesnt promise what it delivers. I would expect a fixed_string
>>to
>>have a fixed length.
>
> It has a fixed capacity, but variable length.
OK.
[...]
> strlen example (and the rationale behind it) was that some users
> (during the initial development) wanted to be able to write operations that
> used fixed-capacity string such that they could redistribute the binaries
> only. Thus the use of the fixed_string_base. An earlier reviewer has shown
> me how to split these so you get the performance from using fixed_string and
> the ability to operate on any fixed_string< n > object without templatizing
> the method on n.
OK .
[...]
> The Spirit docs are very good :).
[...]
OK thats a good model . fixed_string should be easier to describe than Spirit 
too.
> I intend to keep the behaviour of the fixed_string class (modified,
> according to the review feedback). This is what the unit tests are for :).
> It is just *how* that is implemented that will change.
What about the (lack of) overrun policy?
regards
Andy Little