0

boost :: phoenixを使用した簡単な例:

#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 \ boost \ phoenix \ bind \ detail \ member_variable.hpp(54):警告C4180:関数型に適用された修飾子には意味がありません。無視されます

それがどこから来たのか:1)コードの誤り2)再びMSの問題。3)boost :: phoenixライブラリがうまく機能していませんか?

4

1 に答える 1

1

Boost開発者は、おそらくコンパイラ側のエラーであると判断されたため、これを回避するつもりはないと判断したようです。リンクは次のとおりです。

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

これは一般的なboost::bind()用だと思いますが、おそらく修正されないでしょう。そのチケットで提案されている回避策があります。あなたはそれを試みるかもしれません(それはただ警告を無効にするだけです)。

于 2011-10-10T18:20:15.307 に答える