假设我有一个简单的结构体,如下所示:
struct huh { char xxx; };
如果不使用 Boost Fusion 适配的结构体,我想找到一个更简单的代理来操作 Spirit 规则语义动作中的成员变量。当然,这并不起作用:
_val.xxx = _1
但我希望能更加简洁的绑定Phoenix:
bind(&huh::xxx, _val) = _1
这里是一个可以在clang和g++编译器上运行的简单图片示例:
#define BOOST_SPIRIT_USE_PHOENIX_V3 1
#include <boost/config/warning_disable.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <boost/phoenix/bind/bind_member_variable.hpp>
struct huh { char xxx; };
int main() {
namespace qi = boost::spirit::qi;
namespace ascii = boost::spirit::ascii;
namespace phx = boost::phoenix;
qi::rule<std::string::const_iterator, huh(), ascii::space_type> start;
start = qi::char_[
phx::bind(&huh::xxx, qi::_val) = qi::_1
];
return 0;
}
有什么想法吗?
qi::char_[my_val.xxx=qi::_1]
这样使用。您需要使用一个适配宏,因此如果这是您的问题,则此解决方案将无法帮助您。 - llonesmiz