首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时使用x3::点燃提升精神

何时使用x3::点燃提升精神
EN

Stack Overflow用户
提问于 2022-11-15 05:08:56
回答 1查看 31关注 0票数 1

我是从Boost Spirit x3解析库开始的--我对此感到非常兴奋。

有一件事我不清楚,那就是何时以及为什么要使用x3::lit

据我所知,这是因为我们不能期望像']' >> double_这样的表达式在C++语法规则中被解释为意图。

但是,我的解释似乎不正确,因为正式文档显示了许多简单字符串的示例,后面跟着>>运算符,还有一些例子必须将括号和/或方括号指定为lit(']')

我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-15 16:52:01

您通常不能期望'[' >> x看到X3表达式重载。

过载解析取决于两个操作数的类型。因为'[‘是char,所以不能有用户定义的重载。因此,在本例中,仅,如果x已经是x3解析器表达式,则会找到operator>>的x3重载。

在泛型代码中,如果两个操作数都是未知的,则应该使用x3::as_parser而不是x3::lit,因为它将保留其他类型的表达式,但会像您预期的那样促进字符串文本:

代码语言:javascript
复制
 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>>重载的机制是相同的)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74440855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档