Во время тестирования при использовании С++ 11 я использовал следующую конструкцию:
std::for_each( coll.begin(), coll.end(),
[ &obj, expRes ]( const value_type& val )
{
BOOST_CHECK_EQUAL( expRes, obj.someFunc( val ) );
} );
В настоящее время я работаю над проектом, в котором С++ 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»?