#c #boost-phoenix
#c #boost-феникс
Вопрос:
Простой пример использования 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(amp;A::foo, place::_1) % 2 == 1);
int val = (*cit).val_;
return 0;
}
Он компилируется, но на выходе VS2008 есть несколько предупреждений:
c:boost_1_47_0boostphoenixbinddetailmember_variable.hpp (54) : предупреждение C4180: квалификатор, применяемый к типу функции, не имеет значения; игнорируется
Откуда это взялось: 1) некорректность в коде 2) снова проблемы с MS. 3) boost :: библиотека phoenix работает плохо?
Ответ №1:
Похоже, разработчики Boost решили, что они не собираются обходить это, возможно, поскольку это было определено как ошибка со стороны компилятора. Вот ссылка:
https://svn.boost.org/trac/boost/ticket/1097
Я думаю, что это для общего boost::bind() , но я бы поспорил, что это, вероятно, не будет исправлено. В этом билете предлагается обходной путь. Вы можете попробовать это (это просто отключает предупреждение).