Я хотел бы использовать Boost Phoenix для генерации лямбда-функции для использования в операции std :: find_if в структуре, содержащей элементы ссылочного типа. Надуманный пример заключается в следующем:Boost Phoenix: привязка к ссылкам элементов структуры?
struct MyStruct
{
MyStruct() : x(0) {}
int& x;
};
std::vector<MyStruct> AllStructs;
// Search the array for an element for which x == 5
const std::vector<MyStruct>::const_iterator& it =
find_if(
AllStructs.begin(),
AllStructs.end(),
bind(&MyStruct::x, arg1) == 5
);
Если MyStruct :: х имеет тип Int вместо Int &, он отлично компилируется. Но с ссылочным элементом я получаю ошибку «указатель на ссылочный элемент является незаконным».
Из-за того, что я ткнулся в сеть, мне кажется, что мне нужно использовать функциональность Phoenix 'ref', но я не могу представить необходимый синтаксис.
Кто-нибудь знает, как заставить это работать для типа 'int &'?