Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > boost::fusion::vector


Автор: knut 30.1.2012, 20:15
добрий день.
у меня такой вопрос.

есть.
std::vector. элементы которого fusion::vector<int,int>.

надо получить std::vector элементы которого будут N  ыe элементы boost::fusion::vector<int,int> векторов.

std::vector<int> get<N>(matrix) {
// возвращает все N ыe элементы boost::fusion::vector<int,int> oв.
}






Автор: boostcoder 30.1.2012, 20:52
Код

#include <iostream>
#include <vector>
#include <iterator>

#include <boost/fusion/container/vector.hpp>
#include <boost/fusion/include/vector.hpp>
#include <boost/fusion/container/vector/vector_fwd.hpp>
#include <boost/fusion/include/vector_fwd.hpp>
#include <boost/fusion/sequence/intrinsic/at_c.hpp>
#include <boost/fusion/include/at_c.hpp>

typedef boost::fusion::vector<int, int, int, int> mpl_vector4d;
typedef std::vector<mpl_vector4d> std_vector4d;

template<std::size_t N>
void get(std::vector<int>& res, const std_vector4d& vec) {
   if ( res.size() < vec.size() )
      res.resize(vec.size());

   auto res_it = res.begin();
   for ( auto it: vec ) {
      *res_it++ = boost::fusion::at_c<N>(it);
   }
}

int main() {
   std_vector4d vec = {
      {1,2,3,4},
      {1,2,3,4},
      {1,2,3,4}
   };

   std::vector<int> res;
   get<2>(res, vec);

   for ( auto it: res ) {
      std::cout << it << std::endl;
   }
}


http://liveworkspace.org/code/a0fe910f66d62584b87206014594eaed

Автор: knut 31.1.2012, 00:58
отлично !!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)