struct - 升压凤凰: Binding to reference members of structures?

标签 struct reference member boost-phoenix c++

我想使用 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/

相关文章:

c - 错误 : expected '(' to follow a function. 预期为 ';'

c++ - map 和 unordered_map 包含指向 double 的指针?

c++ - 在 C++ 中重载 + 和 += 运算符

vb.net - “应用程序”不是 'My' 的成员

c++ - 调用成员 C++ 函数但 C 函数具有相同的名称

c++ - 在类方法内部访问类的命名空间之外?

C、这条线是做什么的?

c++ - vector 中的 Unique_ptr 作为结构的属性

reference - 如何让 RefCell 的 Ref 活得够久

python - 获取长度(/基数)为 1 的集合项而不删除它的首选 Python 方法?