If you must include both, I'd suggest using the namespace alias (as I've commonly seen it: bll = boost::lambda) While I don't know of an exhaustive comparison, I do believe that boost::bind has better support for smart pointers. As to the const/non-const ref problem, try using boost::ref. HTH, Pablo Aguilar Gerardo Lamastra wrote:
Hello everybody,
I've started to use the functional programming facilities offered by boost, and they're really impressive.
To begin with, I've started using both; I've seen however, that when I #include both and I must use full namespace names to address lambda placeholders. In other words, instead of writing
<snip code>
also if I've written a using boost::lambda declaration; I know,
I can simplify this using a namespace alias, but I was trying to keep the code less clobber as I can, because it has to be used for teaching/example purposes. So, my first question would be: where could I find an exhaustive comparison between these two facilities? And, is there any indication on what to prefer, also related to future development and/or inclusion in C++ standards (If I remember well, boost::lambda has been proposed in tr1?)
The second question points at a small inconsistency that I believe I've found while doing some experiments: boost::bind and boost::lambda::bind offer similar construct, but the former works while the latter fails in the example included below.
The situation is the following: if I try to create a nullary lamnda function with boost::lambda::bind() like this:
generate_n(inserter(v, v.begin()), 10, boost::lambda::bind( boost::lambda::new_ptr(),*this) );
the compiler fails to compile: it tries to pass the this pointer as a const reference somehow, and then it fails claiming that a Slave(const Master& m) cannot be found; If I try to add one, it fails with a similar error.
If I substitute the boost::lambda::bind() with a boost::bind(), it compiles & works perfectly.
Thanks for the attention, -Gerardo Lamastra
<snip code and legal notice>