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);
    #endif
    

    Oder so ähnlich. Schön ist das natürlich nicht, widerlegt aber deine Aussage.


Anmelden zum Antworten