Re: passing function object pointer to for_each argument
On 2007-09-27 23:53:09 -0400, Abhishek Padmanabh
<abhishek.padmanabh@gmail.com> said:
On 27 Sep, 21:50, Daniel Kr?gler <daniel.krueg...@googlemail.com>
wrote:
Your problem is "slicing" and it occurs, because all
algorithms expecting a function do take these by
value (There is only one exception: random_shuffle, because
the random number generator usually contains state).
Why doesn't the standard mandate a pass-by-reference semantics? Pass
by reference should have had avoided this problem to begin with rather
than using the solution got by applying a wrapper containing the
functor pointer member. This would have been fine even with function
pointers. It also fixes the well-known stateful functor problem with
remove_if. Would there be any problem if it were adopted instead of
pass-by-value parameter for the algorithms interface? Or is it too
late to change the interface? Or does does this change even break any
existing code for that matter?
It's not as simple a change as it appears.
class Functor {};
Functor generate();
void f(Functor);
f(generate()); // pass temporary by value
void revised_f(Functor&);
revised_f(generate()); // error: attempting to bind temporary to
non-const reference
To get rid of this error, you could add another overload:
void f(const Functor&);
revised_f(generate()); // OK: binds temporary to const reference
but now you're right back were you started, with a non-modifiable functor.
--
Pete
Roundhouse Consulting, Ltd. (www.versatilecoding.com) Author of "The
Standard C++ Library Extensions: a Tutorial and Reference
(www.petebecker.com/tr1book)
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]