リソースの埋め込み (C++26以降)
From cppreference.com
#embed はリソースを含めるためのプリプロセッサディレクティブであり、リソースは変換環境からアクセス可能なデータのソースとして定義されます。
目次 |
[編集] 構文
#embed < リソース > pp-tokens (オプション) \n * |
(1) | ||||||||
#embed " リソース " pp-tokens (オプション) \n * |
(2) | ||||||||
#embed pp-tokens\n * |
(3) | ||||||||
__has_embed ( pp-balanced-token-seq ) |
(4) | ||||||||
1) 一意に識別される リソース を検索します。
2) 名前付き リソース を検索します。引用符の代わりに山括弧が使用されたかのように (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文字に制限します (実質的に先頭の文字 s なしの単語 world を埋め込みます)。
- prefix(0x2C, 0x20, ) は文字列
sの前に , を追加します。0x2C は , の16進コードで、0x20 は の16進コードです。 - suffix(, 0x21) は文字列
sの末尾に ! を追加します。0x21 は ! の16進コードです。
このコードを実行
#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]
[編集] 関連項目
| バイナリリソースの埋め込み (C23以降) のCドキュメント
|