Мое приложение использует другой вывод, чем стандартный вывод для записи информации, поэтому я написал свои собственные функции Log()
, Error()
, Panic()
и Assert()
. Чтобы организовать вещи красиво, я прилагаю все материалы отладки в пространстве имен Debug
.
Для функции Assert()
было бы более полезно также предоставить исходный файл и номер строки, что возможно только с помощью макросов __LINE__
и __FILE__
. Тем не менее, это довольно неприятно, неэффективно и т.д. Всегда нужно указывать эти два параметра.
Итак, так будет выглядеть мой код:
namespace Debug {
void Assert (int condition, std::string message, std::string file, int line);
}
Мой вопрос: возможно ли разместить макрос, содержащий эти два параметра внутри пространства имен Debug
? Вот так:
namespace Debug {
void Assert_ (int condition, std::string message, std::string file, int line);
#define Assert(a,b) Assert_(a, b, __FILE__, __LINE__)
}
// .... Somewhere where I call the function ....
Debug::Assert (some_condition, "Some_condition should be true");
// Output: Assertion failed on line 10 in file test.cpp:
// Some_condition should be true
Действительно ли это С++? Если нет, есть ли способ сделать эту работу?