我有一个Visual Studio 2008 C ++ 03应用程序,我想使用boost :: lambda来执行此操作:
enum { fooflag = 0x00000001; }
bool IsFooFlagActive( DWORD flags )
{
return ( flags & fooflag ) != 0;
}
不幸的是,这不起作用:
namespace bl = boost::lambda;
bool is_foo_flag_active = ( ( bl::_1 & fooflag ) != 0 )( 0x00000001 );
让boost :: lambda执行复合表达式的正确方法是什么?我需要绑定!=运算符吗?
由于
答案 0 :(得分:2)
我不知道底层的问题是什么,但添加一个演员会让它发挥作用:
namespace bl = boost::lambda;
bool is_foo_flag_active =
((bl::_1 & static_cast<DWORD>(fooflag)) != 0)(0x00000001);
话虽如此,在新代码中停止使用Boost.Lambda - 它已经被正式弃用(除了文档以外),支持Boost.Phoenix近一年了,而且有充分的理由。 (当你使用Phoenix而不是Lambda时,你的代码就会干净利落地编译。)