Как применить mpl :: transform к mpl :: string? - PullRequest
1 голос
/ 11 июня 2010

Я пытаюсь применить преобразование к mpl::string, но не могу его скомпилировать. Я использую MS VC ++ 2010 и Boost 1.43.0. Код:

#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/.

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

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

Спасибо!

1 Ответ

1 голос
/ 15 июня 2010

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

...