Domanda

Come generare fusion :: vector da mpl :: vector ? Come generare mpl :: vector da 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 >));

Ho bisogno delle metafunzioni generate_fusion_vector e generate_mpl_vector . Posso scrivere le mie metafunzioni, ma sospetto che esistano già.

Ho avuto un'esperienza di generazione di fusion :: map con l'aiuto result_of :: as_map prima, ma nell'attuale boost (trunk, anche 1.39) si verifica un simile errore:

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

Non capisco cosa sta succedendo?

È stato utile?

Soluzione

Poiché fusion accetta i tipi mpl come argomenti per le funzioni, è possibile provare questo:

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

Modifica:

Penso che il motivo per cui questo non funziona per te sia che devi includere alcuni file di intestazione per abilitare la compatibilità mpl in fusion.

#include <boost/fusion/adapted/mpl.hpp>
#include <boost/fusion/include/mpl.hpp>

Altri suggerimenti

Non so se stai ancora facendo char, int ma ho riscontrato lo stesso errore e il mio problema era che ho provato a fare un vettore di lunghezza 11, ma FUSION_MAX_VECTOR_SIZE era 10.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top