使用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库做得不好?
发布于 2011-10-11 02:20:15
似乎Boost开发人员决定不解决这个问题,也许是因为它被确定为编译器的一个错误。这里有一个链接:
https://svn.boost.org/trac/boost/ticket/1097
我想这是针对一般的boost::bind()的,但我敢打赌这可能不会被修复。在该标签中有一个建议的解决方法。您可以尝试这样做(它只会禁用警告)。
https://stackoverflow.com/questions/7710409
复制相似问题