如何将mpl :: transform应用于mpl :: string?

时间:2010-06-11 12:01:04

标签: c++ templates boost metaprogramming boost-mpl

我正在尝试将转换应用于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 Sequencempl::stringBidirectional Sequence,我收集的是Forward Sequence类型,所以我认为它有用。

我做错了什么,或者这是不可能的?如果是这样,为什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

事实证明,如果我使用transform_view,它会有效。