Boost logo

Boost :

From: Jeff Flinn (TriumphSprint2000_at_[hidden])
Date: 2003-10-20 08:18:47


"Bronek Kozicki" <Brok_at_[hidden]> wrote in message
news:004601c39702$7645cac0$1700000a_at_integral.int...

...
> We might have two overloaded versions of mutating algorithms:
>
> inplace_proxy<std::string&> trim(inplace_proxy<std::string&>);
>
> std::string trim(const std::string &);
>
> which will make both variants very easy to distinguish. Additional bonus
> is that you can nest calls to both variants in very natural manner:
>
> ucase(trim(in_place(str1))); // in place
> std::string str3 = ucase(trim(str2)); // using temporary copies

I'd vote for this over the "_copy" / "_inplace" approach

> There is a problem, though: proxy class (or template, as proposed above)
> will add small overhead, which is problem for "in-place algorithms" as
> these might be expected to be significaly faster than "copying
> algorithms", thus carrying as small overhead as possible.

Then isn't this a good application for using namespaces rather than adding
suffixes?

#include <boost/string_algo.hpp>

void SomeInplaceStringFnc()
{
    using namespace boost::string_algo;

    trim(to_upper("SomeStuff") ); // error - not defined in this namespace

    using namespace in_place; // I'm an in_place kind of guy

    ::FunctionOperatingOnAString( trim(to_upper("SomeStuff") ) )

    std::string str1(" hello world! ");

    std::string str2 = copy::ireplace_first( str1, "hello", "goodbye" );
}

1) Puts defaulting into the hands of the user, without playing favorites.
2) Makes explicit the default and non-default usage.
3) Uses a common C++ facility in it's intended fashion.
4) Reduces complexity of both usage and implementation.
5) Makes structure of code and documentation more consistent.

-- 
Jeff Flinn
Applied Dynamics, International

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