$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Douglas Gregor (gregod_at_[hidden])
Date: 2002-01-16 14:48:56
On Wednesday 16 January 2002 02:23 pm, you wrote:
> >>>>> "David" == David Abrahams <david.abrahams_at_[hidden]> writes:
>
> David> I think this is the wrong forum for that question. Maybe you
> want David> comp.std.c++?
>
> If it is generally believed that pass by reference is the preferred
> design, then perhaps boost could supply a set of functions:
> generate_ref, transform_ref, etc.
A Boost solution was discussed where boost::reference_wrapper would gain the
ability to pass-through function calls. Then one could use something like:
transform(v.begin, v.end(), back_inserter(out), ref(stateful_function_object))
It's not implemented yet, but you aren't out of luck: Boost.Function and
Boost.Bind both allow their function objects to be wrapped via ref() or
cref(), so the equivalent to the above using Boost.Bind, for instance, would
be:
transform(v.begin(), v.end(), back_inserter(out),
boost::bind<R>(ref(stateful_function_object)));
where R is the return type of stateful_function_object.
Boost.Function works similarly, and one could use:
transform(v.begin(), v.end(), back_inserter(out),
boost::function<R, Arg1>(ref(stateful_function_object)));
where R is the return type and Arg1 is the argument type of
stateful_function_object.
The Boost.Bind function is what you probably want, unless
stateful_function_object happens to be coming from somewhere else and you're
suffering from template bloat because of it.
Doug