在 Spirit 中将解析器分配给自动变量时避免段错误
Spirit 解析器本质上并不是为与 Spirit V2 中的自动变量一起使用而设计的。这是由于底层 Proto 表达式模板维护对临时变量的引用。
在内联 qi::parse() 表达式中将 auto 与解析器结合使用会导致成功解析。但是,将解析器分配给 auto 变量,然后在 qi::parse() 中使用它会导致段错误。
要规避此限制,请考虑以下替代方案:
- qi::copy():可在 Spirit V2 的 trunk 中使用(boost_1_55_0 及更高版本), qi::copy() 可以创建解析器的深层复制。
-
boost::proto::deep_copy:该函数可以实现 Proto 表达式的深层复制。
- BOOST_SPIRIT_AUTO:这个宏在 Spirit V2 的讨论论坛中引入,提供了一种使用自动变量中的解析器。
有关更多详细信息和示例,请参阅以下资源:
- [与优化相关的 Spirit V2 qi bug level](https://stackoverflow.com/questions/12011946/spirit-v2-qi-bug-linked-with-optimization-level)
- [auto 变量中的 Spirit X3 解析器](https:// stackoverflow.com/questions/27979404/spirit-x3-parser-within-auto-variable)
以上是使用带有'auto”变量的 Spirit 解析器时如何避免段错误?的详细内容。更多信息请关注PHP中文网其他相关文章!