1

私には2つの関数があります:1。A&DataSource(); 2. void DataConsumer(A *);

私が達成したいこと:1つのステートメントを使用してそれらを1つのファンクターにアセンブルします

私が試してみました:

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

確かにそれは機能しませんでした、コンパイラはそれが'boost :: _ bi::bind_t'を'A*'に変換できないと言います

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

コンパイラは、パラメータ1を「boost :: _ bi ::bind_t」から「A&」に変換できないと言っています

質問:ネストされたboost :: bindからの戻り値を使用する方法は?または、boost :: lambda::bindを使用する場合。

4

1 に答える 1

1

みんな、私はちょうど次のように答えを見つけました:

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

理論は次のようになります。後でDataSourceを呼び出すため、後で戻り値も使用するファンクターが必要です。

于 2010-04-16T05:20:13.240 に答える