¿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?