генерировать слияние :: вектор из mpl :: vector - PullRequest
3 голосов
/ 24 июня 2009

Как сгенерировать fusion::vector из mpl::vector? Как сгенерировать mpl::vector из fusion::vector?

BOOST_MPL_ASSERT((is_same<
                  fusion::vector<int, char>,
                  generate_fusion_vector<mpl::vector<int, char> >::type >));

BOOST_MPL_ASSERT((is_same<
                  mpl::vector<int, char>,
                  generate_mpl_vector<fusion::vector<int, char> >::type >));

Мне нужны метафункции generate_fusion_vector и generate_mpl_vector. Я могу написать свои собственные метафункции, но я подозреваю, что они уже существуют.

Раньше у меня был опыт генерации fusion::map с помощью result_of::as_map, но в текущем бусте (транк тоже 1.39) возникает такая ошибка:

D:\Libraries\boost_trunk\boost/fusion/sequence/intrinsic/size.hpp(56) : error C2903: 'apply' : symbol is neither a class template nor a function template
        D:\Libraries\boost_trunk\boost/fusion/container/vector/convert.hpp(23) : see reference to class template instantiation 'boost::fusion::result_of::size' being compiled
        with
        [
            Sequence=boost::mpl::vector
        ]
        temp.cpp(71) : see reference to class template instantiation 'boost::fusion::result_of::as_vector' being compiled

Я не понимаю, что происходит?

Ответы [ 2 ]

7 голосов
/ 24 июня 2009

Поскольку fusion принимает типы mpl в качестве аргументов функций, вы можете попробовать это:

BOOST_MPL_ASSERT((is_same<
fusion::vector<int, char>,
fusion::result_of::as_vector<mpl::vector<int, char> >::type >));

Edit:

Я думаю, причина того, что это не работает для вас, заключается в том, что вы должны включить определенные заголовочные файлы, чтобы обеспечить совместимость mpl в fusion.

#include <boost/fusion/adapted/mpl.hpp>
#include <boost/fusion/include/mpl.hpp>
0 голосов
/ 19 ноября 2009

Я не знаю, выполняете ли вы еще char, int, но я столкнулся с той же ошибкой, и моя проблема заключалась в том, что я пытался создать вектор длиной 11, но FUSION_MAX_VECTOR_SIZE было 10.

...