>Nope. Please see http://article.gmane.org/gmane.comp.lib.boost.devel/23466
>for the semantics clarification. Basically, I want the whole bind 
>expression to return an unary function object which, when invoked, will
>use the argument to construct a nested nullary function object:

>    bind( &show_warning, message_dialog(), <arg> )

>and pass it as an argument to 'post_command'.

>Does it make more sense now?

Ok, I really should have a cup of coffee before I answer these questions,

The problem with using "lambda" or "bind" in this case is one of order of operations. 
You want

// written as if I had inline function definitions.

void f(char *msg) {
  
     .....
     post_command(void) {
       ....
       show_warning(message_dialog(), msg);
     }
   }

now the problem is that you really can't do this elegantly in C++. You can pass the 
msg into show_warning either as a global or on the stack. Lambda makes the general 
assumption that you want to pass things on the stack. What you need is a temporary 
global.

I have some code that might do it, but its not released. (I'm also not sure that 
Brian's FC++ solution did it right either.) I could send you a copy and let you try if 
you want. Anyway it would look like this.

   boost::function<void( user_message )> f(
          ll::locals<user_message_type &>(_1) [
             bind( &post_command,
                bind(bind( &show_warning, message_dialog(),loc0 ) )
              ]
          );

This should cause a reference to the user_message to be able to be referenced inside 
of post_command.

But I haven't tested it and I don't have time this week either.

Anyway if there was a case for having a core language feature to do inline function 
definitions this is it.

     -Gary-



  -Gary-
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to