Czy możliwe jest umieszczenie makra w przestrzeni nazw w c ++?

Moja aplikacja używa innego wyjścia niż standardowe wyjście do rejestrowania informacji, dlatego napisałem własneLog(), Error(), Panic() iAssert() Funkcje. Aby porządkować wszystko, dołączam wszystkie elementy debugowania do plikuDebug przestrzeń nazw.

Byłoby bardziej sensowne dlaAssert() funkcja umożliwiająca również dostarczenie pliku źródłowego i numeru linii, co jest możliwe tylko przy użyciu__LINE__ i__FILE__ makra. Jednak jest to dość nieprzyjemne, nieefektywne itd ... aby zawsze określić te dwa parametry.

Tak wygląda mój kod:

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

Moje pytanie brzmi, czy możliwe jest umieszczenie makra zawierającego te dwa parametry wewnątrzDebug przestrzeń nazw? Lubię to:

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

Czy to jest poprawne c ++? Jeśli nie, czy jest jakiś sposób na wykonanie tej pracy?

questionAnswers(5)

yourAnswerToTheQuestion