Namensräume
Varianten
Aktionen

Ressourcen-Einbindung (seit C++26)

Von cppreference.com
 
 
C++ Sprache
Allgemeine Themen
Kontrollfluss
Bedingte Ausführungsaussagen
if
Iterationsanweisungen (Schleifen)
for
Bereichs-for (C++11)
Sprunganweisungen
Funktionen
Funktionsdeklaration
Lambda-Funktionsausdruck
inline-Spezifizierer
Dynamische Ausnahmespezifikationen (bis C++17*)
noexcept-Spezifizierer (C++11)
Ausnahmen
Namensräume
Typen
Spezifizierer
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Speicherdauer-Spezifizierer
Initialisierung
Ausdrücke
Alternative Darstellungen
Literale
Boolesch - Ganzzahl - Gleitkommazahl
Zeichen - String - nullptr (C++11)
Benutzerdefinierte (C++11)
Dienstprogramme
Attribute (C++11)
Typen
typedef-Deklaration
Typalias-Deklaration (C++11)
Umwandlungen
Speicherzuweisung
Klassen
Klassenspezifische Funktionseigenschaften
explicit (C++11)
static

Spezielle Member-Funktionen
Templates
Sonstiges
 
 

#embed ist eine Präprozessor-Direktive zum Einbinden von Ressourcen, wobei eine Ressource als eine Datenquelle definiert ist, die aus der Übersetzungs-Umgebung zugänglich ist.

Inhalt

[bearbeiten] Syntax

#embed < resource > pp-tokens (optional) \n * (1)
#embed " resource " pp-tokens (optional) \n * (2)
#embed pp-tokens\n * (3)
__has_embed ( pp-balanced-token-seq ) (4)
1) Sucht nach einer eindeutig identifizierten resource.
2) Sucht nach einer benannten resource. Fällt auf (1) zurück, als ob stattdessen spitze Klammern anstelle von Anführungszeichen verwendet worden wären.
1-2) Ersetzt die Direktive durch eine kommagetrennte Liste von Ganzzahlen, die den Daten der Ressource entsprechen.
3) Wenn weder (1) noch (2) zutreffen, wird pp-tokens einer Makroersetzung unterzogen. Die Direktive nach der Ersetzung wird erneut versucht, mit (1) oder (2) abzugleichen.
resource - Eine einzubettende Ressource
pp-tokens - Positive Anzahl von Präprozessor-Tokens
pp-balanced-token-seq -

[bearbeiten] Erklärung

1) Eine Suche findet in einer Reihe von implementierungsdefinierten Orten statt. Wie die Orte spezifiziert oder die Ressource identifiziert wird, ist implementierungsdefiniert.
2) Eine Suche findet auf eine implementierungsdefinierte Weise statt. Ein Fallback folgt, wenn diese Suche nicht unterstützt wird oder fehlschlägt.

[bearbeiten] Embed-Parameter

[bearbeiten] Beispiel

Angenommen, die Datei word.txt enthält ein einziges Wort: worlds.

  • limit(5) begrenzt das Einbetten auf 5 Zeichen (bettet effektiv das Wort world ohne den ersten Buchstaben s ein).
  • prefix(0x2C, 0x20, ) stellt , ​ dem String s voran: 0x2C ist der Hex-Code von , und 0x20 ist der Hex-Code von ​ ​.
  • suffix(, 0x21) hängt ! an den String s an: 0x21 ist der Hex-Code von !.
#include <string>
#include <print>
 
int main()
{
    std::string s
    {
        #embed "word.txt" prefix(0x2C, 0x20, ) suffix(, 0x21) limit(5)
    };
 
    std::println("Hello{}", s);
}

Mögliche Ausgabe

Hello, world!

[bearbeiten] Referenzen

  • C++26 Standard (ISO/IEC 14882:2026)
  • 15.4 Ressourcen-Einbindung [cpp.embed]

[bearbeiten] Siehe auch

C-Dokumentation für Binäre Ressourcen-Einbindung (seit C23)