2009-06-24 8 views
3

Comment générer fusion::vector à partir de mpl::vector? Comment générer mpl::vector à partir de fusion::vector?générer fusion :: vecteur à partir de mpl :: vecteur

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 >)); 

J'ai besoin generate_fusion_vector et generate_mpl_vector métafonctions. Je peux écrire mes propres métafonctions, mais je pense qu'elles existent déjà.

J'ai eu une expérience de génération fusion::map avec l'aide result_of::as_map avant, mais coup de pouce courant (tronc, 1,39 également) une telle erreur se produit:

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 

Je ne comprends pas ce qui se passe?

+0

Avez-vous besoin de calculer le type d'un fusion :: vector avec les mêmes types qu'un mpl :: vector (les vecteurs mpl :: ont seulement des types, pas des valeurs), ou voulez-vous dire mpl :: vector_c? –

+0

Je veux calculer un type. – Andreo

Répondre

7

Comme fusion accepte les types de mpl comme arguments aux fonctions que vous pourriez essayer:

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

Edit:

Je pense que la raison pour laquelle cela ne fonctionne pas pour vous est que vous devez inclure certains en-tête fichiers pour permettre la compatibilité mpl en fusion.

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

J'ai généré fusion :: map avec l'aide result_of :: as_map avant, mais dans le boost actuel (trunk, 1.39 aussi) une telle erreur se produit:

 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 ] 
Je ne comprends pas ce qui se passe? – Andreo

0

Je ne sais pas si vous faites encore char, int, mais je suis tombé dans la même erreur et mon problème est que j'ai essayé de faire une longueur 11 vecteur, mais FUSION_MAX_VECTOR_SIZE était 10.

Questions connexes