string frage
-
berniebutt schrieb:
Zum letzten Beitrag des Fragestellers: Macros würde ich hier nicht einsetzen.
Thema für mich: daddeldu
Natürlich setzt man fürs Logging ein Makro ein. Aus dem selben Grunde, aus dem man für assert ein Makro verwendet.
-
Ich hab mir zum debuggen und loggen neulich was realtiv simples geschrieben:
class Log { static ostream& instance(std::string const& name = "mylog.log") { static std::ofstream of(name.c_str()); return of; } public: static void init(std::string const& name) { (void*)instance(name); } static ostream& log() { return instance(); } static ostream& debug() { #ifdef _DEBUG return instance() << "DBG:>>> "; #else static struct dummyostream : public std::ostream { template <typename T> dummyostream& operator<< (T const&) {return *this;} } os; return os; #endif } }; int main() { Log::init("optionalalternativername.log"); Log::log() << "alles ok" << endl; Log::debug() << "Zeile " << __LINE__ << " erreicht"; }
-
volkard schrieb:
Natürlich setzt man fürs Logging ein Makro ein. Aus dem selben Grunde, aus dem man für assert ein Makro verwendet.
Nur wenn man das Logging per PP-Flag komplett ausschalten will UND bereit ist dafür auf variable Parameterzahlen und den ganzen Kram zu verzichten bzw. sich den Output dann doch irgendwie wieder irgendwie on the Fly zusammenschustert.
-
pumuckl schrieb:
UND bereit ist dafür auf variable Parameterzahlen und den ganzen Kram zu verzichten bzw. sich den Output dann doch irgendwie wieder irgendwie on the Fly zusammenschustert.
#ifdef DEBUGGE_DU_SAU #define debug(msg) cout << (msg); #else #define debug(msg); #endifOder so ähnlich. Schön ist das natürlich nicht, widerlegt aber deine Aussage.