Am 09.10.2010 11:24, schrieb alfC:
On Oct 8, 8:00 pm, OvermindDL1
wrote:
[snip]
The previous posts a few posts ago seems overly complicated, I would just do this (suitably wrapped into a function to handle it, maybe named copy):
// Proper includes here...
struct set1stTo2nd { template<typename T> void operator()(T& t) const { using namespace boost::fusion; deref(begin(t)) = deref(next(begin(t))); }};
typedef boost::array
arrType; typedef boost::fusion::vector vecType; typedef boost::fusion::vector zipSeqType; arrType arr(1,1,1); vecType vec(5,5,5);
for_each(zipSeqType(arr,vec), set1stTo2nd()); assert(arr == make_vector(5,5,5));
Thank you very much for the code. Unfortunately it doesn't work, compiles but it doesn't copy the vector into the array. Below is the full program, it leaves the array intact.
It doesn't make sense either, the for_each argument has only two elements, the array and the vector. The for_each will just first "do" the array and then "do" the vector, but it just seems to assign the first element of each to the second but not copying values from the vector to the array.
(I still remember the time when I could copy one an array of doubles to the other.) Below is the full program if you want to give it a try:
#include
#include #include #include #include #include #include #include<iostream> using std::clog; using std::endl; using namespace boost::fusion; struct set1stTo2nd { template<typename T> void operator()(T& t) const { deref(boost::fusion::begin(t)) = deref(boost::fusion::next(boost::fusion::begin(t))); } };
typedef boost::array
arrType; typedef boost::fusion::vector vecType; typedef boost::fusion::vector zipSeqType; int main(){ boost::array
arr1={{1.0, 2.1, 3.2}}; clog << "arr1: " << arr1[0] << ", " << arr1[1] << ", " << arr1[2] << endl; boost::fusion::vector
vec1(arr1); clog << "vec1: " << at_c<0>(vec1) << ", "<< at_c<1>(vec1) << ", " << at_c<2>(vec1) << endl; boost::array
arr2; for_each(zipSeqType(arr2,vec1), set1stTo2nd());
fusion::zip(arr2,vec1) should be used here, or fusion::zip_view<zipSeqType>(zipSeqType(arr2,vec1)) . http://www.boost.org/doc/libs/1_44_0/libs/fusion/doc/html/fusion/algorithm/t... http://www.boost.org/doc/libs/1_44_0/libs/fusion/doc/html/fusion/view/zip_vi...
clog << "arr2: " << at_c<0>(arr2) << ", "<< at_c<1>(arr2) << ", " << at_c<2>(arr2) << endl; return 0; }
prints: arr1: 1, 2.1, 3.2 vec1: 1, 2.1, 3.2 arr2: 4.85589e-270, 4.85589e-270, 4.90963e-270
-Christopher