資源嵌入 (C++26 起)
來自 cppreference.com
#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 起)
|