2013-03-20 2 views
0

Я пытаюсь использовать for_each из библиотеки ускорения C++. Это код, который у меня есть.Как использовать for_each из библиотеки ускорения C++?

#include <iostream> 
#include <vector> 

#include <boost/fusion/algorithm/iteration/for_each.hpp> 
#include <boost/fusion/include/for_each.hpp> 

using namespace std; 

int main() { 

     vector<int> vec; 
     vec.push_back(1); 
     vec.push_back(2); 
     vec.push_back(3); 

     boost::for_each(
       vec, 
       [](int val){ 
         cout << val << "\n"; 
       } 
     ); 

     return 0; 
} 

Это, как я скомпилировать мой код:

g++ -std=c++0x -I /opt/software/boost/1.50_ubuntu12.4lts_gcc4.7.2/include -c try_boost.cpp 
g++ -o try_boost -L/opt/software/boost/1.50_ubuntu12.4lts_gcc4.7.2/lib try_boost.o -lboost 

В результате я получаю:

error: ‘for_each’ is not a member of ‘boost’ 

Кто-нибудь знает, почему он не работает?

+1

Попробуйте 'boost :: fusion :: for_each'. Я не использую его, поэтому не знаю точно. – chris

+0

@chris: Это тоже не сработает. – Nawaz

+2

Этот 'for_each', который вы используете, не работает с' std :: vector'. Это работает с tuple-like boost :: vector из библиотеки Fusion. – Nawaz

ответ

8

Вы используете for_each из Boost.Fusion Library. Это не работает с std::vector.

for_each, в котором вы нуждаетесь, находится в Boost.Range Library.

#include <boost/range/algorithm/for_each.hpp> //note this difference! 

boost::for_each(vec, your-lambda-expression); 

Она определяется внутри boost::range пространства имен, которое доводится до boost пространства имен с помощью using декларативных. Таким образом, вы также можете написать так:

boost::range::for_each(vec, your-lambda-expression); 
Смежные вопросы