资源嵌入 (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 起)
|