Ich versuche herauszufinden, wie man ein Makro schreibt, das sowohl eine Zeichenfolgenliteraldarstellung eines Variablennamens als auch die Variable selbst an eine Funktion übergibt.
Zum Beispiel die folgende Funktion gegeben.
void do_something(string name, int val)
{
cout << name << ": " << val << endl;
}
Ich möchte ein Makro schreiben, damit ich dies tun kann:
int my_val = 5;
CALL_DO_SOMETHING(my_val);
Welches würde ausdrucken: my_val: 5
Ich habe Folgendes versucht:
#define CALL_DO_SOMETHING(VAR) do_something("VAR", VAR);
Wie Sie vielleicht erraten haben, wird die VAR in den Anführungszeichen jedoch nicht ersetzt, sondern nur als Zeichenfolgenliteral "VAR" übergeben. Ich würde gerne wissen, ob es eine Möglichkeit gibt, das Makroargument selbst in ein String-Literal umzuwandeln.
Antworten:
Verwenden Sie den Präprozessor
#
Betreiber :quelle
Sie möchten den Stringisierungsoperator verwenden:
quelle
Vielleicht versuchen Sie diese Lösung:
quelle
QUDI(x)
nicht genug ist , einfach zu haben.quelle
"Hello" #x"
(und#x "Hello"
) die Schnur ohne Leerzeichen zusammengeklebt, was in einigen Fällen erwünscht ist. Dies ist also eine ziemlich gute Antwort."Hello " #x