命名空间
变体
操作

资源包含 (自 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 起)