
Memfis wrote:
Peter Dimov wrote:
I am trying to achieve this with format and bind, but without much luck. What I came up with is the following: source.connect(bind(ref(target), bind(&format::str, bind(&format::operator%, format("the value is %1"), _1)));
Your format string throws an exception for me. Perhaps you need to use %1%?
Argh. I made a typo while editing the post. I use %1% of course. But it still doesn't work.
The following works for me. I had to disambiguate format::operator% because it's a template, though, it couldn't compile as is. It would've been nice if format provided operator() as an alias so it could be bound. #include <iostream> #include <boost/format.hpp> #include <boost/bind.hpp> #include <boost/signal.hpp> void f( std::string str ) { std::cout << str << std::endl; } int main() { using namespace boost; signal< void( std::string ) > target; target.connect( &f ); format& (format::*pmf)( int const & ) = &format::operator%; signal< void( int ) > source; source.connect( bind( ref( target ), bind( &format::str, bind( pmf, format( "the value is %1%" ), _1 ) ) ) ); source( 12345 ); }