2

我正在尝试使用 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 的多个部分。

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

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

4

2 回答 2

4

我认为您使用了错误的 boost 库。phoenix 算法是惰性函数,在此处进行了说明。所以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; });
}
于 2014-02-04T10:33:02.243 回答
1

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

#include <boost/phoenix/core.hpp>
#include <boost/phoenix/stl/algorithm.hpp>
... rest of your program
于 2014-02-04T10:25:33.373 回答