簡體   English   中英

使用帶有復合表達式的boost lambda

[英]using boost lambda with compound expressions

我有一個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執行復合表達式的正確方法是什么? 我需要綁定!=運算符嗎?

謝謝

我不知道底層的問題是什么,但添加一個演員使它工作:

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

話雖這么說,在新代碼中停止使用Boost.Lambda - 它已經被正式棄用(除了文檔以外),支持Boost.Phoenix近一年了,而且有充分的理由。 (當你使用Phoenix而不是Lambda時,你的代碼就會干凈利落地編譯。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM