【问题标题】:boost::lambda std::mapboost::lambda std::map
【发布时间】:2012-04-15 16:46:12
【问题描述】:

我想通过使用 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 &”

任何提示如何解决这个问题?

【问题讨论】:

  • Boost.Lambda 已正式弃用;请在新代码中使用Boost.Phoenix

标签: c++ boost lambda bind boost-lambda


【解决方案1】:

我认为您的问题是将 lambdas(即函数)与 lambdas 返回的值混合:

例如:

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

返回一个函数。

因此,用结果调用 serialize_class(...) 对我来说没有意义。

也就是说,我还没有深入研究过您的代码。我发现它有点混乱。

【讨论】:

  • 我认为你是对的。使用 boost::lambda::bind( &Pages::value_type::second, boost::lambda::_1 ) 我只想访问地图 map::pair 的第二项。但结果是一个函子。任何建议如何处理?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多