我開始使用 Boost Spirit x3 決議庫 - 我對此感到非常興奮。
我不清楚的一件事是何時以及為什么應該使用x3::lit.
據我了解,這是因為我們不能期望像']' >> double_C 句法規則中的預期那樣解釋運算式。
但我的解釋似乎不正確,因為官方檔案顯示了許多簡單字串的示例,后跟>>運算子,以及其他必須將括號和/或方括號指定為的示例lit(']')
我錯過了什么?
uj5u.com熱心網友回復:
您通常不能期望'[' >> x看到 X3 運算式過載。
多載解析度取決于兩個運算元的型別。因為'[' 是 char,所以不能有用戶定義的多載。所以在這種情況下,只有當x已經是一個 x3 決議器運算式時,operator>>才會發現 x3 多載。
在通用代碼中,如果兩個運算元都是未知的,您應該使用x3::as_parserinstead ofx3::lit因為它會保持其他型別的運算式不變,但會像您期望的那樣提升字串文字:
auto combine(auto a, auto b) {
return x3::as_parser(a) >> x3::as_parser(b);
}
例如,多載決議機制'x' >> x3::double_是 ADL:https ://en.cppreference.com/w/cpp/language/adl (順便說一句,它與std::cout << "Hello world\n"查找std::operator>>多載的機制相同)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/534005.html
標籤:C 解析促进提升精神x3
上一篇:sql通過id匹配不同記錄的表
