2010-06-11 3 views
1

Я пытаюсь применить преобразование к mpl::string, но не могу его скомпилировать. Я использую MS VC++ 2010 и Boost 1.43.0. Код:Как применить mpl :: transform к строке 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; 

} 

Я отправил полное сообщение об ошибке в http://paste.ubuntu.com/447759/.

The MPL документы говорят, что mpl::transform нуждается в Forward Sequence и mpl::string является Bidirectional Sequence, который я собираю это тип Forward Sequence, поэтому я думал, что это работает.

Я делаю что-то неправильно или это невозможно? Если да, то почему?

Спасибо!

+2

* «Я делаю что-то не так?» * Ум, пытающийся метапрограммировать шаблон на C++? *** утки *** –

+0

, если вы используете _MS_ VC 2010, почему вы публикуете свои проблемы на сайте _Ubuntu_? – KitsuneYMG

ответ

1

Оказывается, он работает, если я использую transform_view.

+0

Эта проблема возникла из-за ошибки в Boost.MPL и будет исправлена ​​в следующем выпуске: http://lists.boost.org/boost-users/2010/06/60002.php –

Смежные вопросы