用VS2008加速::凤凰

时间:2011-10-10 08:48:25

标签: c++ boost-phoenix

使用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库做得不好?

1 个答案:

答案 0 :(得分:1)

看起来Boost开发人员决定他们不会解决这个问题,也许是因为它确定是编译器的一个错误。这是一个链接:

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

我认为这是一般的boost :: bind(),但我敢打赌,这可能不会被修复。该票证中有一个解决方法。您可以尝试(它只是禁用警告)。

相关问题