命名空间
变体
操作

资源嵌入 (C++26 起)

来自 cppreference.cn
 
 
C++ 语言
 
 

#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) 搜索以实现定义的方式进行。如果此搜索不支持,或搜索失败,则进行回退。

[编辑] 嵌入参数

[编辑] 示例

假设文件 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 起)