c++ 何时使用x3::lit的增强精神

edqdpe6u  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(140)

我开始与Boost Spirit x3解析库-我非常兴奋。
我不清楚的一件事是什么时候以及为什么应该使用x3::lit
据我所知,这是因为我们不能期望像']' >> double_这样的表达式在C++语法规则中被解释为预期的。
但是我的解释似乎是不正确的,因为官方文档显示了许多简单字符串后跟>>运算符的示例,以及必须将括号和/或方括号指定为lit(']')的其他示例
我错过了什么?

thigvfpy

thigvfpy1#

您 * 通常 * 不能期望'[' >> x看到X3表达式重载。
重载解析取决于两个操作数的类型。由于'[ '是char,因此不能有用户定义的重载。因此,在这种情况下,如果x已经是x3分析器表达式,则会找到operator>>的x3重载。
在泛型程式码中,如果两个算子都是未知的,您应该使用x3::as_parser而非x3::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>>重载的机制相同)

相关问题