2010-06-11 12 views
1

J'essaye d'appliquer une transformation à un mpl::string, mais je n'arrive pas à le compiler. J'utilise MS VC++ 2010 et Boost 1.43.0. Le code:Comment appliquer une transformation mpl :: à une chaîne mpl :: string?

#include <boost/mpl/string.hpp> 
#include <boost/mpl/vector_c.hpp> 
#include <boost/mpl/transform.hpp> 
#include <boost/mpl/plus.hpp> 
#include <boost/mpl/arithmetic.hpp> 

using namespace boost; 

int main() { 

    // this compiles OK 
    typedef mpl::vector_c<int, 'abcd', 'efgh'> numbers; 
    typedef mpl::transform<numbers, mpl::plus<mpl::_1, mpl::int_<1> > >::type result_numbers; 

    // this doesn't (error C2039: 'value' : is not a member of 'boost::mpl::has_push_back_arg') 
    typedef mpl::string<'abcd', 'efgh'> chars; 
    typedef mpl::transform<chars, mpl::plus<mpl::_1, mpl::int_<1> > >::type result_chars; 

} 

J'ai posté le message d'erreur complet à http://paste.ubuntu.com/447759/.

Les MPL docs disent que mpl::transform a besoin d'un Forward Sequence et mpl::string est un Bidirectional Sequence, que je crois est un type de Forward Sequence, donc je pensais que ça fonctionne. Est-ce que je fais quelque chose de mal, ou est-ce carrément impossible? Si oui, pourquoi?

Merci!

+2

* "Est-ce que je fais quelque chose de mal?" * Um, essayant la métaprogrammation de template en C++? *** canards *** –

+0

Si vous utilisez _MS_ VC 2010 pourquoi publiez-vous vos problèmes sur un site web _Ubuntu_? – KitsuneYMG

Répondre

1

Il s'avère que cela fonctionne si j'utilise transform_view.

+0

Ce problème était dû à un bug dans Boost.MPL, et sera corrigé dans la prochaine version: http://lists.boost.org/boost-users/2010/06/60002.php –