【发布时间】:2015-11-23 21:42:50
【问题描述】:
如果我有一个简单的结构,比如:
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;
}
有什么想法吗?
【问题讨论】:
-
This 是我前段时间尝试过的愚蠢的东西。有了它,您可以使用
qi::char_[my_val.xxx=qi::_1]之类的东西。您需要使用自适应宏,所以如果这是您的问题,此解决方案将无济于事。
标签: c++ boost boost-spirit