boost::phoenix::排序错误

发布于 2024-12-14 20:32:09 字数 541 浏览 4 评论 0原文

我正在尝试使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

海之角 2024-12-21 20:32:09

正如所评论的,我不认为你从向量创建凤凰演员的方法可以用来对其进行排序,但我从未使用过凤凰的算法,所以我不确定。
您当然可以使用 sort 并使用 phoenix 创建一个函子来对其进行排序。
所以我建议用这种方式使用phoenix。

boost::phoenix::sort(boost::phoenix::placeholders::arg1, boost::phoenix::placeholders::arg2)(fooVec, 
        boost::phoenix::bind( &Foo::getvalue, boost::phoenix::bind( &std::pair<int, Foo>::second, boost::phoenix::placeholders::arg1)) < boost::phoenix::bind( &Foo::getvalue, boost::phoenix::bind( &std::pair<int, Foo>::second, boost::phoenix::placeholders::arg2))
        );

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.

boost::phoenix::sort(boost::phoenix::placeholders::arg1, boost::phoenix::placeholders::arg2)(fooVec, 
        boost::phoenix::bind( &Foo::getvalue, boost::phoenix::bind( &std::pair<int, Foo>::second, boost::phoenix::placeholders::arg1)) < boost::phoenix::bind( &Foo::getvalue, boost::phoenix::bind( &std::pair<int, Foo>::second, boost::phoenix::placeholders::arg2))
        );
夏の忆 2024-12-21 20:32:09

这就是错误消息所说的。 std::pair::second 是数据成员,而不是类或命名空间,因此不能对其使用运算符 ::

您可以使用 second_type 来代替 second,它是该对中第二个元素的类型的 typedef

boost::phoenix::sort ( boost::phoenix::bind( &std::pair<int, Foo>::second_type::getvalue, boost::phoenix::arg_names::arg1) (*fooVec.begin() ), std::less<int>() );

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 use second_type, which is a typedef for the type of the second element in the pair:

boost::phoenix::sort ( boost::phoenix::bind( &std::pair<int, Foo>::second_type::getvalue, boost::phoenix::arg_names::arg1) (*fooVec.begin() ), std::less<int>() );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文