Ressourcen-Einbindung (seit C++26)
Von cppreference.com
< cpp | präprozessor
#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
| Dieser Abschnitt ist unvollständig Grund: [cpp.embed.param] |
[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
svoran: 0x2C ist der Hex-Code von , und 0x20 ist der Hex-Code von . - suffix(, 0x21) hängt ! an den String
san: 0x21 ist der Hex-Code von !.
Führen Sie diesen Code aus
#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)
|