Wie kann ich mein c ++ - Ausnahmemakro durch eine Inline-Funktion mit Unterstützung für __LINE__ und __FILE__ ersetzen?

Ich lese derzeit das Buch Effective C ++ von Scott Meyers. Es heißt, ich sollte lieberinline funktioniert über#define für funktionsähnliche Makros.

Jetzt versuche ich, eine Inline-Funktion zu codieren, um mein Ausnahmemakro zu ersetzen. Mein altes Makro sieht so aus:

#define __EXCEPTION(aMessage) \
{ \
    std::ostringstream stream; \
    stream << "EXCEPTION: " << aMessage << ", file " <<__FILE__ << " line " << __LINE__; \
    throw ExceptionImpl(stream.str()); \
}

Meine neue Inline-Funktion lautet:

inline void __EXCEPTION(const std::string aMessage)
{
   std::ostringstream stream;
   stream << "EXCEPTION: " << aMessage << ", file " <<__FILE__ << " line " << __LINE__;
   throw ExceptionImpl(stream.str());
}

Wie wahrscheinlich manche Leute schon erwarten, jetzt die__FILE__ und__LINE__ -Makros sind nutzlos, da sie sich immer auf die C ++ - Datei mit der Definition der Inline-Funktion beziehen.

Gibt es eine Möglichkeit, dieses Verhalten zu umgehen, oder sollte ich bei meinem alten Makro bleiben? Ich habe diesen Thread hier gelesen und vermute bereits, dass es für mein zweites Beispiel wahrscheinlich keine Möglichkeit gibt, gut zu funktionieren:

Verhalten von __LINE__ in Inline-Funktionenerwendung von @__FILE__, __LINE__ und __FUNCTION__ in C ++

Antworten auf die Frage(8)

Ihre Antwort auf die Frage