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?