在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中文網其他相關文章!