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; });
}

Boostの複数の部分を使用する2つのプラットフォーム(Win7、Ubuntu)で試しました。

エラーメッセージはかなり長いので、ファイルに入れました:

テンプレートが正しくコンパイルされていないことを除けば、実際には多くのエラーを発生させることはできませんが、かなり単純なものが欠けていると思います。

4

2 に答える 2

4

間違ったブースト ライブラリを使用していると思います。フェニックスアルゴリズムは、ここで説明されている遅延関数です。Sophoenix::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 に答える