Я хотел бы использовать Boost Phoenix для создания лямбда-функции для использования в операции std :: find_if в структуре, содержащей элементы ссылочного типа. Надуманный пример выглядит следующим образом:
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 :: x имеет тип int вместо int &, он компилируется нормально. Но со ссылочным элементом я получаю ошибку «указатель на ссылочный элемент является недопустимым».
Пошарив в сети, мне кажется, что мне нужно использовать функцию «ref» Phoenix, но я не могу понять требуемый синтаксис.
Кто-нибудь знает, как заставить это работать для типа int &?