Boost logo

Boost :

From: Vladimir Prus (ghost_at_[hidden])
Date: 2003-01-08 11:41:25


David Abrahams wrote:
> Vladimir Prus <ghost_at_[hidden]> writes:

>>I'd prefer the latter variant, so that non-broken platforms use more natural
>>syntax. Another question is whether we could use only the second version.
>>Theoretically, if you call the second version on const string, then InputT
>>should be deduced as "const string". You can then write a simple wrapper to
>>select const_iterator or iterator.
>>
>>The only problem is, IIRC, borland drops "const" on template arguments
>>sometimes, and that's not possible to fix. Also, the "simple wrapper"
>>requires partial specialization. So, I'm not sure this approach is
>>viable, either.
>
>
> There are mostly-transparent solutions. Something like:
>
> // find_first sequence const version
> template< typename InputT, typename SearchT >
> inline iterator_range< typename InputT::const_iterator >
> find_first_impl( const InputT& Input, const SearchT& Search, 0 )
> {
> ...
> }

I'm guessing the last parameter should be "int"?

> // find_first sequence non-const version
> template< typename InputT, typename SearchT >
> inline iterator_range< typename InputT::const_iterator >
> find_first_impl( InputT& Input, const SearchT& Search, int )
> {
> ...
> }
>
> // find_first sequence
> template< typename InputT, typename SearchT >
> inline iterator_range< typename InputT::iterator >
> find_first( InputT& Input, const SearchT& Search )
> {
> find_first_impl(Input, Search, 0);
> }
>
> Should work on vc6. Can't vouch for Borland, though :(

Unfortunately, "first_first" will return the same plain (non-const) iterator
in all cases. And we'd need to return const_iterator when string is const.

- Volodya


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