C++ das verketten von __FILE__ und __LINE__ werden Makros?
Möchte ich meine Ausnahme-Nachrichten enthalten Informationen über die Ausnahme-Speicherort.
Also ich würde gerne einige Sache wie diese.
#define LOCATION __FILE__ " : " __LINE__
throw std::exception(std::string("ABCD. ") + LOCATION);
Definieren, ist offensichtlich falsch. Wie dies zu erreichen?
- Hinweis: Sie vereinfachen könnten, indem die Ausnahme-Konstruktion
std::exception( "ABCD." LOCATION )
. - Sie können einen Blick hier haben stackoverflow.com/questions/1739102/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie erweitern das makro in zwei Ebenen:
Warum?
Kurze Antwort: die Sie benötigen, erweitern Sie
__LINE__
in zwei Ebenen, vor der übergabe an#x
.Lange Antwort: Zunächst über operator
#
im Funktion-wie makro muss, gefolgt von einem makro mit parameter aber__LINE__
ist kein parameter, also compiler beschwert sich, es ist ein streunender Betreiber.Zweiten
__LINE__
selbst ist ein makro und enthält aktuelle Zeilennummer, es sollte erweitert werden, um die Anzahl, bevor Sie es mit#
, andernfalls bekommen Sie string"__LINE__"
statt einer Nummer.Makro
S2(__LINE__)
erweitert__LINE__
auf eine Zeilennummer, dann passieren wir die Nummer der Zeile, zu#x
.BOOST_PP_STRINGIZE(__LINE__)
bedeutet, dass, im Falle Sie nicht wollen, erstellen Sie Ihre eigenen Makros S1 und S2.