我正在尝试使用boost :: phoenix库对向量进行排序。 Foo类具有成员函数'int getvalue()'。目的是使用“ getvalue()”返回的值对向量进行排序。但是缺少了一些东西。我收到编译器错误,因为“ :: second不是类或名称空间”

      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:我知道我可以使用函数object / lambda或类似的东西,但我想尝试boost :: phoenix。

最佳答案

如前所述,我认为您不能使用从向量中创建phoenix actor的方式对其进行排序,但是我从未使用过phoenix的算法,因此我不确定。
您当然可以使用sort并用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))
        );

关于c++ - boost::phoenix::sort错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8051858/

10-13 06:29