Question

I have two functions: 1. A & DataSource(); 2. void DataConsumer( A * );

What I want to achieve: Using one statement to assemble them into one functor.

I have tried:

1. boost::function< void()> func( boost::bind( DataConsumer, & boost::bind( DataSource ) ) );

certainly it didn't work, compiler says it can not convert 'boost::_bi::bind_t ' to 'A *'

2. boost::function< void()> func( boost::bind( DataConsumer, boost::addressof( boost::bind( DataSource ) ) ));

compiler says cannot convert parameter 1 from 'boost::_bi::bind_t' to 'A &'

Question: how to use return value from the nested boost::bind ? or if you want to use boost::lambda::bind.

Was it helpful?

Solution

guys, I just found the answer, like following:

boost::function< void()> func(
        boost::bind( DataConsumer, 
                     boost::bind( boost::addressof< A >, boost::bind< A& >( DataSource ) )
                    )            );

The theory should be: since we call DataSource later, we need a functor that uses the return value later as well.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top