c++ - 如何像在 Python 中一样在 C++ 中实现 f-string?
问题描述
我想为 C++ 创建一个 F 字符串,就像在 Python 中一样。但我不明白花括号 {} 中的表达式是如何解析的。
示例(Python):
world = "world"
print(f "Hello {world}")
我如何做同样的事情,但在 C++ 中?
std::string world = "world!"
std::cout << f("Hello {world}") << std::endl;
输出
Hello world!
解决方案
一旦程序被编译(并且不使用调试模式),变量的名称就会丢失。因此,即使您解析了 f 字符串,您也没有直接的方法来识别预期的变量。
但这是一个由预编译器解决的真实用例:您使用特殊声明,这些声明要么依赖于宏来保存 f 字符串中允许的变量名称,要么使用预编译器阶段来翻译将特殊代码转换为 C++ 代码 + 进行所需的特殊处理(此处将变量名称保存在映射中)。使用宏的示例可以在 Microsoft MFC 中找到,预编译器的示例可以在qt或 Oracle pro*C 中找到。
恐怕开发起来会比程序员的收益更复杂,所以我的回答归结为它是可能的,但恕我直言不值得。
推荐阅读
- java - 带有 websocket 和会话拦截器的 Spring + Tomcat = 问题
- android - Jetpack Compose:在可滚动中使用 AndroidView 时,我看到了意外行为
- python - InvalidArgumentError:收到的标签值 5 超出了 [0, 5) 的有效范围。?
- javascript - 如何在 Firefox 中创建具有 12 小时时间格式的日期对象?
- graphql - 使用 ApolloClient 将变量传递给 GraphQL 突变似乎不起作用
- c# - 在 Web 表单中显示异常消息而无需转到 YSD
- php - 尝试使用 PHP 使用 mysqldump 备份 sql 文件
- c# - 使用 MongoDB C#/.NET 驱动程序为变音符号不敏感搜索设置排序规则
- kubernetes - 在 Ansible Tower 调查中使用变量进行作业调度 (AWX: 17.0.1 & Ansible: 2.9.17)
- python - FileNotFoundError:Heroku 无法读取存在并在本地运行的文件