Как я могу заменить мой макрос исключений c ++ встроенной функцией с поддержкой __LINE__ и __FILE__?
В настоящее время я читаю книгу Effective C ++ от Скотта Мейерса. Это говорит, что я должен предпочестьinline
функции над#define
для функциональных макросов.
Теперь я пытаюсь кодировать встроенную функцию, чтобы заменить мой макрос исключения. Мой старый макрос выглядит так:
#define __EXCEPTION(aMessage) \
{ \
std::ostringstream stream; \
stream << "EXCEPTION: " << aMessage << ", file " <<__FILE__ << " line " << __LINE__; \
throw ExceptionImpl(stream.str()); \
}
Моя новая встроенная функция такова:
inline void __EXCEPTION(const std::string aMessage)
{
std::ostringstream stream;
stream << "EXCEPTION: " << aMessage << ", file " <<__FILE__ << " line " << __LINE__;
throw ExceptionImpl(stream.str());
}
Как, вероятно, некоторые люди уже ожидают, теперь__FILE__
а также__LINE__
макросы бесполезны, потому что они всегда ссылаются на C ++ - файл с определением встроенной функции.
Есть ли способ обойти это поведение или я должен придерживаться своего старого макроса? Я читаю эти темы здесь, и я уже подозреваю, что мой второй пример, вероятно, не будет работать нормально:
Поведение __LINE__ во встроенных функцияхИспользование __FILE__, __LINE__ и __FUNCTION__ в C ++