Preprocessor: Ersetzungen in Raw-Strings
-
Hallo Leute,
kann ich dem Preprocessor per Flag o.ä. mitteilen, dass defines auch innerhalb von Raw-Strings ersetzen, z.B:
#define TIER Hund // ... R"( Das Tier ist ein TIER )"; // ...Dabei soll der Code von Preprocessor so umgeformt werden:
#define TIER Hund // ... R"( Das Tier ist ein Hund )"; // ...Danke und Gruß
-
Direkt im string nicht aber so kannst du es z.B. machen:
#define TIER "Hund" //... const char *text = "Das Tier ist ein " TIER;
-
Das ist ganz einfach möglich mit einem constexpr string-replace.
-
Vielen Dank.
In Wirklichkeit betrachte ich einen wesentlich komplexeren Raw-String; dein Vorgeschlagenes Vorgehen ist zwar möglich, würde meinen Code aber sehr unleserlich machen.
Gibt es keine Möglichkeit dem Preprocessor mitzuteilen, dass er (ganz naiv) auch in Strings ersetzen soll?Grüße
-
Hallo 21thcentury,
kannst du mir evtl. eine Minimalbeispiel zeigen?
Danke
-
Sind die Strings gleich lang?
-
Hallo Arcoth,
nein, die Strings werden sich durch Ersetzung mittels der defines in der Länge unterscheiden.
Danke und Gruß
-
Ganz pragmatisch?
#define xstr(x) str(x) #define str(x) #x #define Tier Hund auto s = R"( Das Tier ist ein )" xstr(Tier) R"( )";
-
Gast12345 schrieb:
Vielen Dank.
In Wirklichkeit betrachte ich einen wesentlich komplexeren Raw-String; dein Vorgeschlagenes Vorgehen ist zwar möglich, würde meinen Code aber sehr unleserlich machen.
Warum? Ich seh jetzt da keinen großen unterschied um ehrlich zu sein. Kannst du mal ein beispiel geben das diese unleserlichkeit demonstriert?
Gast12345 schrieb:
Gibt es keine Möglichkeit dem Preprocessor mitzuteilen, dass er (ganz naiv) auch in Strings ersetzen soll?
Wie gesagt, nein. Zumindest nicht exakt so wie du das willst.
Es geht aber auch noch einfacher: CTRL-H (auch: "replace all") im Texteditor deiner wahl.