资源包含 (自 C++26 起)
来自 cppreference.cn
#embed 是一个预处理器指令,用于包含资源,其中资源被定义为可从翻译环境访问的数据源。
目录 |
[编辑] 语法
#embed < resource > pp-tokens (可选) \n * |
(1) | ||||||||
#embed " resource " pp-tokens (可选) \n * |
(2) | ||||||||
#embed pp-tokens\n * |
(3) | ||||||||
__has_embed ( pp-balanced-token-seq ) |
(4) | ||||||||
1) 搜索唯一标识的 resource。
2) 搜索命名的 resource。回退到 (1),如同使用了尖括号而不是引号。
1-2) 将指令替换为逗号分隔的整数列表,这些整数对应于资源的数据。
3) 如果 (1) 和 (2) 都不匹配,则 pp-tokens 将进行宏替换。替换后的指令将再次尝试与 (1) 或 (2) 匹配。
resource | - | 要嵌入的资源 | ||
pp-tokens | - | 预处理记号的正数 | ||
pp-balanced-token-seq | - |
|
[编辑] 解释
1) 搜索发生在实现定义的地点序列中。地点的指定方式或资源的标识方式是实现定义的。
2) 搜索以实现定义的方式进行。如果不支持此搜索,或者搜索失败,则会进行回退。
[编辑] 嵌入参数
本节内容不完整 原因:[cpp.embed.param] |
[编辑] 示例
假设文件 word.txt
包含一个单词:worlds。
- limit(5) 将嵌入限制为 5 个字符(有效地嵌入单词 world,不包括前导字母 s)。
- prefix(0x2C, 0x20, ) 在字符串
s
前面添加 , :0x2C 是 , 的十六进制代码,0x20 是 的十六进制代码。 - suffix(, 0x21) 在字符串
s
后面添加 !:0x21 是 ! 的十六进制代码。
运行此代码
#include <string> #include <print> int main() { std::string s { #embed "word.txt" prefix(0x2C, 0x20, ) suffix(, 0x21) limit(5) }; std::println("Hello{}", s); }
可能的输出
Hello, world!
[编辑] 参考文献
- C++26 标准 (ISO/IEC 14882:2026)
- 15.4 资源包含 [cpp.embed]
[编辑] 参见
C 文档 关于 二进制资源包含 (自 C23 起)
|