Можно ли поместить макрос в пространство имен в C++?

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

Это допустимый С++? Если нет, есть ли способ заставить эту работу работать?

17
задан Tibi 3 August 2012 в 07:27
поделиться