我想使用 Boost Phoenix 生成一个 lambda 函数,用于对包含引用类型成员的结构进行 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&,则可以正常编译。但是对于引用成员,我收到“指向引用成员的指针非法”错误。
从网上查了一下,我似乎需要使用 Phoenix 的“ref”功能,但我似乎无法弄清楚所需的语法。
有人知道如何让它适用于“int&”类型吗?
最佳答案
抱歉,这已经太晚了,但是为了将来的引用,您可以使用成员指针:
std::vector<MyStruct>::const_iterator it =
find_if(AllStructs.begin(), AllStructs.end(),
(&boost::phoenix::arg_names::arg1)->*&MyStruct::x == 5
);
关于struct - 升压凤凰: Binding to reference members of structures?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3596708/