名前空間
変種
操作

リソースの埋め込み (C++26以降)

From cppreference.com
 
 
C++言語
全般
フロー制御
条件実行文
if
繰り返し文 (ループ)
for
範囲for (C++11)
ジャンプ文
関数
関数宣言
ラムダ式
inline指定子
動的例外仕様 (C++17まで*)
noexcept指定子 (C++11)
例外
名前空間
指定子
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点数
文字 - 文字列 - nullptr (C++11)
ユーザー定義 (C++11)
ユーティリティ
属性 (C++11)
typedef宣言
型エイリアス宣言 (C++11)
キャスト
メモリ確保
クラス
クラス固有の関数プロパティ
explicit (C++11)
static

特殊メンバ関数
テンプレート
その他
 
 

#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) 実装定義の方法で検索が行われます。この検索がサポートされていない場合、または検索が失敗した場合はフォールバックが続きます。

[編集] 埋め込みパラメータ

[編集]

ファイル 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ドキュメント
English 日本語 中文(简体) 中文(繁體)