From: "Duane Murphy" <duanemurphy@mac.com>
Thank you! That's the ticket. I also noticed that the function object can be unnamed which avoids any name collisions.
I think that unnamed classes cannot be used as template parameters. Some compilers allow this, but strictly speaking it's not legal. For example g++ 2.95.3 complains.
The template can also be static. Is there any side affects to be concerned about that? What does it mean to have a static template function inside a struct?
Nothing special; a static template generates static functions. An operator cannot be static, though.
I have another related question.
I have a situation where I want to use a bind object within a bind object but the bindings are unrelated. In the documentation it explains that the nested binds are treated specially, is there a way around this special treatment?
Currently Bind doesn't provide a way to suppress the evaluation, but see http://groups.yahoo.com/group/boost/files/protect.hpp for a temporary solution: #include <boost/bind.hpp> #include "protect.hpp" struct F { template<class G> int operator()(G g) { return g(); } } f; int g(int x) { return x; } int main() { boost::bind<int>( f, protect( boost::bind(g, 5) ) )(); } I'll add protect to bind.hpp sometimes in the future. The only thing that's holding me back is that I don't like the name. Another useful wrapper is http://groups.yahoo.com/group/boost/files/make_adaptable.hpp that makes an adaptable function object with a fixed signature. It can be used to get around the rvalue problem. -- Peter Dimov Multi Media Ltd.