Как я могу заменить мой макрос исключений 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 ++

Ответы на вопрос(0)

Ваш ответ на вопрос