小编Bra*_*den的帖子

如何将boost :: spirit :: qi :: lexeme的属性转换为std :: string?

考虑:

struct s {
  AttrType f(const std::string &);
};
Run Code Online (Sandbox Code Playgroud)

...以及r具有属性的规则AttrType:

template <typename Signature> using rule_t =
  boost::spirit::qi::rule<Iterator,
                          Signature,
                          boost::spirit::qi::standard::space_type>;

rule_t<AttrType()> r;

r = lexeme[alnum >> +(alnum | char_('.') | char_('_'))][
      _val = boost::phoenix::bind(&s::f, s_inst, _1)
    ];
Run Code Online (Sandbox Code Playgroud)

编译时(使用clang),我收到此错误消息:

boost/phoenix/bind/detail/preprocessed/member_function_ptr_10.hpp:28:72: error: no viable conversion from
      'boost::fusion::vector2<char, std::__1::vector<char, std::__1::allocator<char> > >' to 'const std::__1::basic_string<char>'
                return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0);
                                                                       ^~
Run Code Online (Sandbox Code Playgroud)

我的印象是问题是占位符变量的类型_1.是否有简洁的方法将lexeme属性转换std::string为此目的?

如果我插入属性类型为的附加规则std::string,则编译:

rule_t<std::string()> r_str;

r = r_str[boost::phoenix::bind(&s::f, s_inst, _1)];
r_str = lexeme[alnum >> …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-spirit boost-phoenix boost-spirit-qi

6
推荐指数
1
解决办法
607
查看次数