2011-10-10 77 views
0

簡單的例子鳳::鳳:的boost ::使用升壓與VS2008

#include <vector> 
#include <algorithm> 
#include <boost/phoenix.hpp> 

namespace ph = boost::phoenix; 
namespace place = boost::phoenix::placeholders; 

struct A 
{ 
    int val_; 
    explicit A(int i) : val_(i) {} 
    int foo() { return val_;} 
}; 

int main() 
{ 
    std::vector<A> coll; 
    coll.push_back(A(2)); 
    coll.push_back(A(4)); 
    coll.push_back(A(5)); 
    coll.push_back(A(7)); 

    std::vector<A>::const_iterator cit; 
    cit = std::find_if(coll.begin(), coll.end(), ph::bind(&A::foo, place::_1) % 2 == 1); 
    int val = (*cit).val_; 

    return 0; 
} 

它編譯但也有一些警告在VS2008的輸出:

C:\ boost_1_47_0 \提升\鳳凰\ bind \ detail \ member_variable.hpp(54):警告C4180:適用於函數類型的限定符沒有任何意義;忽略

它來自哪裏:1)代碼2中的不正確)再次出現MS問題。 3)boost :: phoenix庫不好嗎?

回答

1

它看起來像Boost開發者決定,他們不會解決這個問題,也許因爲它被確定爲編譯器的錯誤。這裏有一個鏈接:

https://svn.boost.org/trac/boost/ticket/1097

我認爲這是對一般的boost :: bind()的,但我敢打賭,這可能不會是固定的。該票中提出了一種解決方法。你可以嘗試一下(它只是禁用了警告)。