boost :: lambdaを使用してコードを単純化したいと思います。ここに私のコードは次のとおりです。boost :: lambda std :: map
// 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: 'ツール:: Serilizer :: makePair':CONSTブースト」からパラメータ2を変換することはできません::ラムダ:: lambda_functor 'から' const Tools :: Serilizer :: Serilizable & '
これを解決するヒントはありますか?
Boost.Lambdaは正式に廃止されました。新しいコードの代わりに[Boost.Phoenix](http://www.boost.org/libs/phoenix/)を使用してください。 – ildjarn