c++ 11 を使用する場合のテスト中に、次の構成を使用しました。
std::for_each( coll.begin(), coll.end(),
[ &obj, expRes ]( const value_type& val )
{
BOOST_CHECK_EQUAL( expRes, obj.someFunc( val ) );
} );
私は現在、C++11 が使用されていないプロジェクトに取り組んでおり、別の関数/ファンクターを作成することなく、同様のラムダ式を生成する方法を探しています。
ラムダを作成するための の基本的な使用法は理解していますが、マクロboost::phoenix
を呼び出すことができるフェニックス ラムダを作成する方法が思いつきません。boost::test
私が思いつくことができる最高のものは次のとおりです。
template< typename T >
void MakeCheck( const T& lhs, const T& rhs )
{
BOOST_CHECK_EQUAL( lhs, rhs );
}
/// inside some other function...
std::for_each( coll.begin(), coll.end(),
ph::bind( MakeCheck<bool>, true,
ph::bind( &MyClass::someFunc, obj, ph::arg_names::arg1 ) ) );
残念ながら、マクロ BOOST_CHECK_EQUAL はstd::for_each
呼び出しの行番号ではなく、マクロの行番号を報告するため、このアプローチでは失敗したチェックの行番号情報が失われます。
「boost::phoenix」を使用したマクロ呼び出しを含むラムダを作成するより良い方法はありますか?