我想通过使用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&amp;'
任何提示如何解决这个问题?
答案 0 :(得分:0)
我认为你的问题是将lambdas(即函数)与lambdas返回的值混合在一起:
例如:
boost::lambda::bind( &Pages::value_type::second, boost::lambda::_1 )
返回一个函数。
因此调用serialize_class(...)
及其结果对我来说没有意义。
那就是说,我没有深入研究你的代码。我发现它有点令人困惑。