提升凤凰编译错误

Boost Phoenix compilation error

本文关键字:错误 编译 凤凰      更新时间:2023-10-16

我正在尝试使用Boost Phoenix。我的目标是让 stl 算法采用容器而不是迭代器的范围,如前所述 这里。 但是,我在一个相当简单的代码上遇到了一堆错误:

#include <boost/phoenix/stl/algorithm.hpp>
#include <iostream>
#include <vector>
#include <algorithm>
namespace phx = boost::phoenix;
int main(int argc, char ** argv) {
std::vector<int> my_arr{ 0, 1, 2, 3 };
phx::for_each(my_arr, [](int i){std::cout << i << std::endl; });
}

我在两个平台(Win7,Ubuntu)上尝试过,否则我会使用Boost的多个部分。

错误消息相当长,所以我将它们放在文件中:

  • MVC++ 2013 年 11 月,提升 1.55

  • G++4.7.2,提升 1.53

除了模板未正确编译之外,我真的不能犯很多错误,但我想我错过了一些相当简单的东西。

我认为您使用了错误的提升库。凤凰算法是惰性函数,此处对此进行了解释。因此,如果调用phoenix::for_each,它不会执行任何操作,而是返回一个函数对象,该对象在调用后遍历该范围。如果您只想在范围上使用 STL(和其他)算法,您可以使用 boost.range 库:

#include <boost/range/algorithm/for_each.hpp>
#include <iostream>
#include <vector>
namespace rng = boost::range;
int main(int argc, char ** argv) {
std::vector<int> my_arr{ 0, 1, 2, 3 };
rng::for_each(my_arr, [](int i){std::cout << i << std::endl; });
}

您只需要在包含其他任何内容之前包含phoenix核心。

#include <boost/phoenix/core.hpp>
#include <boost/phoenix/stl/algorithm.hpp>
... rest of your program