boost::phoenix::排序错误
我正在尝试使用 boost::phoenix 库对下面的向量进行排序。 Foo 类有一个成员函数“int getvalue()”。目的是使用“getvalue()”返回的值对向量进行排序。但缺少一些东西。我收到编译器错误“::second is not a class or namespace”
std::vector<std::pair<int, Foo> > fooVec;
boost::phoenix::sort ( boost::phoenix::bind( &std::pair<int, Foo>::second::getvalue(), boost::phoenix::arg_names::arg1) (*fooVec.begin() ), std::less<int>() );
任何人都可以解释一下吗?我需要做出哪些改变才能使这项工作发挥作用?
谢谢。
PS:我知道我可以使用函数对象/lambda 或类似的东西,但我想尝试一下 boost::phoenix。
I am trying to sort a vector below using boost::phoenix library. The class Foo has a member function 'int getvalue()'. The purpose is to sort the vector using the value returned by 'getvalue()'. But something is missing. I get compiler error as '::second is not a class or namespace'
std::vector<std::pair<int, Foo> > fooVec;
boost::phoenix::sort ( boost::phoenix::bind( &std::pair<int, Foo>::second::getvalue(), boost::phoenix::arg_names::arg1) (*fooVec.begin() ), std::less<int>() );
Can anybody please explain this. What changes do I need to make this work?
Thanks.
PS: I know I could have used function object/lambda or soemthing similar but I wanted to try out boost::phoenix.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
正如所评论的,我不认为你从向量创建凤凰演员的方法可以用来对其进行排序,但我从未使用过凤凰的算法,所以我不确定。
您当然可以使用 sort 并使用 phoenix 创建一个函子来对其进行排序。
所以我建议用这种方式使用phoenix。
As commented, I don't think that your way of creating a phoenix actor from your vector can be used to sort it, but I never used the algorithms from phoenix so I not sure about it.
You can of course use sort and create a functor with phoenix to sort it.
So I would suggest to use phoenix this way.
这就是错误消息所说的。
std::pair::second
是数据成员,而不是类或命名空间,因此不能对其使用运算符::
。您可以使用
second_type
来代替second
,它是该对中第二个元素的类型的typedef
:It's just what the error message says.
std::pair<int, Foo>::second
is a data member, not a class or namespace, so you cannot use operator::
on it.Instead of
second
, you can usesecond_type
, which is atypedef
for the type of the second element in the pair: