0

このアクションを実行するために boost::lambda を使用したい Visual Studio 2008 C++03 アプリケーションがあります。

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

I don't know what the underlying issue is, but adding a cast makes it work:

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

That being said, stop using Boost.Lambda in new code – it's been officially deprecated (in all but documentation) in favor of Boost.Phoenix for nearly a year now, and with good reason. (And your code compiles cleanly as-is when using Phoenix rather than Lambda.)

于 2012-05-31T22:15:45.843 に答える