|
Boost Users : |
From: Tobias Schwinger (tschwinger_at_[hidden])
Date: 2007-03-26 10:46:33
Eric Niebler wrote:
> Frankly, I think the proposed design (function object passed by value,
> or by reference with explicitly specified template arg) is ugly. It'll
> be ugly both from the user's perspective and in the implementation.
OK, but why?
For the fusion/functional module the implementation part turned to be
rather smooth.
I must admit that for algorithms (where the function isn't the first
parameter) the different ordering of the template parameters slightly
bugs me.
> If by-value is a perf-win in the common case (perf numbers?),
I don't think it is. There are cases where it gets optimized better,
however.
You can observe the effect by
s/F const &/F/g in libs/fusion/example/performance/functional.cpp
using GCC, bjam release-mode options.
Note there is only a small (but clearly measurable) difference in this
case (it's not the one I've been talking about in my previous post --
too much work to reconstruct now, sorry). But, as said, numbers don't
say much, since they entirely depend on the code that is to be optimized.
> then I'd
> prefer by-ref semantics to look like this:
>
> for_each( seq, ref(func) );
If ef wrap/unwrap optimizes out entirely, this variant looks like a nice
alternative.
Another one would be to forget about the whole thing. There is a
'mutable' keyword, after all -- and, alternatively, a Function Object
may reference an external state.
Regards,
Tobias
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net