在使用 c++ 11 进行测试期间,我使用了以下构造:
std::for_each( coll.begin(), coll.end(),
[ &obj, expRes ]( const value_type& val )
{
BOOST_CHECK_EQUAL( expRes, obj.someFunc( val ) );
} );
我目前正在研究一个不使用 C++11 的项目,我是否正在寻找一种方法来生成类似的 lambda 表达式,而不必创建单独的函数/仿函数。
我了解boost::phoenix
创建 lambda 的基本用法,但我想不出一种方法来创建能够调用boost::test
宏的 phoenix lambda。
我能想到的最好的是:
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”的宏调用的 lambda?