0

boost::lambda を使用してコードを簡素化したい。これが私のコードです:

// Declare container:
typedef std::map< PageId, Page* > Pages;
Pages m_pages;

// For serialization:
template < class DataType > TPair< DataType > makePair( const std::string& identification, const DataType& dataType )
{
    return TPair< DataType >( identification, dataType );
}

#define SERILIZE_CLASS( _value ) ::Tools::Serilizer::makePair< ::Tools::Serilizer::Serilizable >( EXTRACT_NAME( _value ), _value )



// This does work and should be simplified by....
for( BOOST_AUTO( i, m_pages.begin( ) ); i != m_pages.end( ); ++i )
{
    obj << SERILIZE_CLASS( *i->second );
}

// this code but itdoes not compile
std::for_each( m_pages.begin( ), m_pages.end( ), 
obj << SERILIZE_CLASS( boost::lambda::bind( &Pages::value_type::second, boost::lambda::_1 ) ) );

最後に、これは結果のエラー コードです。

エラー C2664: 'Tools::Serilizer::makePair': パラメーター 2 を 'const boost::lambda::lambda_functor' から 'const Tools::Serilizer::Serilizable &' に変換できません

これを解決する方法のヒントはありますか?

4

1 に答える 1

0

あなたの問題は、ラムダ(つまり関数)とラムダによって返される値を混合していると思います:

例えば:

boost::lambda::bind( &Pages::value_type::second, boost::lambda::_1 )

関数を返します。

そのため、結果を呼び出しserialize_class(...)ても意味がありません。

とはいえ、私はあなたのコードを深く研究していません。少し混乱しました。

于 2012-04-15T16:54:54.770 に答える