0

我有一个 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 执行复合表达式的正确方法?我需要绑定 != 运算符吗?

谢谢

4

1 回答 1

2

我不知道根本问题是什么,但是添加演员表可以使它起作用:

namespace bl = boost::lambda;
bool is_foo_flag_active =
    ((bl::_1 & static_cast<DWORD>(fooflag)) != 0)(0x00000001);

话虽如此,请停止在新代码中使用 Boost.Lambda——它已被正式弃用(除了文档之外的所有文件),近一年来有利于Boost.Phoenix ,而且有充分的理由。(当使用 Phoenix 而不是 Lambda 时,您的代码可以按原样干净地编译。)

于 2012-05-31T22:15:45.843 回答