Мое приложение использует другой вывод, отличный от стандартного вывода для регистрации информации, поэтому я написал свои собственные функции 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
Это допустимый С++? Если нет, есть ли способ заставить эту работу работать?