具有自定义属性解析的Boost Spirit规则
我正在编写Boost Spirit语法,将文本解析为以下结构的向量:具有自定义属性解析的Boost Spirit规则,boost,attributes,boost-spirit,boost-spirit-qi,boost-phoenix,Boost,Attributes,Boost Spirit,Boost Spirit Qi,Boost Phoenix,我正在编写Boost Spirit语法,将文本解析为以下结构的向量: struct Pair { double a; double b; }; BOOST_FUSION_ADAPT_STRUCT( Pair, (double, a) (double, a) ) 该语法有如下规则: qi::rule<Iterator, Pair()> pairSequence; pairSequence = double_[_val = Pair(_1,
struct Pair
{
double a;
double b;
};
BOOST_FUSION_ADAPT_STRUCT(
Pair,
(double, a)
(double, a)
)
该语法有如下规则:
qi::rule<Iterator, Pair()> pairSequence;
pairSequence = double_[_val = Pair(_1, DEFAULT_B)] % separator;
我希望这个语法生成一个对
,其中a
等于双精度,b
等于某个常数。我想这样做:
qi::rule<Iterator, Pair()> pairSequence;
pairSequence = double_[_val = Pair(_1, DEFAULT_B)] % separator;
当然,上面的内容无法编译。我尝试向Pair添加构造函数,但仍然出现编译错误(调用“Pair::Pair(const boost::phoenix::actor>&,double)”时没有匹配的函数)。首先,
pairSequence的签名需要是:
qi::rule<Iterator, std::vector<Pair>()> pairSequence;
这样可以简化语法:
pairSequence = double_ % separator;
并完全依赖Spirit的内置属性传播规则
顺便说一句,要想让这一切都起作用,你不需要将Pair
调整为融合序列。啊,是的,我错过了向量构造。
pairSequence = double_ % separator;