I'd like to copy the contents of a boost::mpl::vector_c (or similar)
into an output iterator at runtime.
Thank you for the help Rutger, Kim, and Steven, and especially for the
mpl::for_each examples and the copy functor.
The more complete use case was to turn an MPL sequence into a form
usable within an initialization list for either boost::array or
something requiring an iterator. For completeness, the helper class I
finally went with is below.
I appreciate your expertise,
Rhys
#define BOOST_TEST_MODULE $Id: test_mpl.cc 999 2010-03-18 15:08:46Z rhys $
#include
#include
#include
#include
#include
template< typename Sequence >
class sequence_array
: public boost::array<
typename Sequence::value_type,
boost::mpl::size<Sequence>::type::value
>
{
typedef typename boost::array<
typename Sequence::value_type,
boost::mpl::size<Sequence>::type::value
>::iterator iterator;
struct copier_ {
copier_(iterator it) : it_(it) {}
template<typename U> void operator()(U u) { *(it_++) = u; }
iterator it_;
};
public:
sequence_array() {
boost::mpl::for_each<Sequence>(copier_(this->begin()));
}
};
BOOST_AUTO_TEST_CASE( testing )
{
sequence_array< boost::mpl::vector_c > a;
BOOST_CHECK_EQUAL(a[0], 2);
BOOST_CHECK_EQUAL(a[1], 4);
BOOST_CHECK_EQUAL(a[2], 6);
boost::array b = { 2, 4, 6 };
BOOST_CHECK( b == a );
BOOST_CHECK( a == b );
}