¿Es posible colocar una macro en un espacio de nombres en c ++?

Mi aplicación usa otra salida que la salida estándar para la información de registro, por lo que escribí mi propiaLog(), Error(), Panic() yAssert() funciones Para organizar las cosas bien, encierro todas las cosas de depuración en unDebug espacio de nombres.

Tendría más sentido para elAssert() función para proporcionar también un archivo fuente y un número de línea, que solo es posible utilizando el__LINE__ y__FILE__ macros Sin embargo, es bastante desagradable, ineficiente, etc. ... tener que especificar siempre estos dos parámetros.

Así es como se vería mi código:

namespace Debug {
   void Assert (int condition, std::string message, std::string file, int line);
}

Mi pregunta es, ¿es posible colocar una macro que incluya esos dos parámetros dentro de laDebug espacio de nombres? Me gusta esto:

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

¿Es este c ++ válido? Si no, ¿hay alguna manera de hacer que esto funcione?

Respuestas a la pregunta(5)

Su respuesta a la pregunta