"string" zu "const string"



  • hallo. ich möchte gerne einen string erst einen wert setzen und dann später diesen string in einen konstanten string umwandeln. hier ein auszug meines quellcodes:

    class foo
    {
    public:
    foo();
    private:
    string bar;
    };
    
    foo::foo()
    {
    bar = "das ist foobar";
    
    //nun will ich, dass "bar" konstant ist, wie stelle ich das an?
    }
    

    ich weiss, dass ich es dann in einen neuen konstanten string machen kann, aber das will ich nicht.

    kann mir da jemand helfen?



  • class foo
    {
    public:
    foo();
    private:
    string const bar;
    };
    
    foo::foo():bar("das ist foobar")
    {}
    


  • okay, aber ich hab von diesen variablen nen ganzen haufen (ca. 100)... soll ich etwa alle hinter den konstruktor schreiben?



  • Oder:

    class foo
    {
    public:
      foo();
    private:
      const string bar; // <--- (IMHO) lesbarer
    };
    
    foo::foo()
      : bar("das ist foobar")
    { }
    

    problemo schrieb:

    okay, aber ich hab von diesen variablen nen ganzen haufen (ca. 100)... soll ich etwa alle hinter den konstruktor schreiben?

    Was genau willst du denn machen? 100 Variablen? Konstanten??



  • naja ich hab mehrere string-arrays. ersteinmal müssen einige schritte in der klasse gemacht werden und dann werte in den array schreiben. anschliessend sollte dieser array konstant werden, damit er halt nicht mehr überschrieben werden kann.
    danke.



  • wo ist denn das problem wenn du vor jedes 'string bar' ein 'const' schreibst (copy/paste)? es dauert halt ein bischen, aber wer sagt schon das programmieren schnell gehen soll (außer dein chef 😉 )



  • enno-tyrant: Also ich benutz für sowas lieber search & replace :p



  • Vielleicht hilft dir das weiter:

    class foo
    {
    public:
      foo(const std::vector<std::string>& vec);
    private:
    #ifdef SCHRITTE_BEI_KONSTRUKTION_DURCHFUEHRBAR
      const std::vector<std::string> createBar(const std::vector<std::string>& vec);
    #else
      void setupBar();
    #endif
      const std::vector<std::string> bar;
    };
    
    using namespace std;
    
    #ifdef SCHRITTE_BEI_KONSTRUKTION_DURCHFUEHRBAR
    foo::foo(const vector<string>& vec)
      : bar(createBar(vec))
    { }
    
    const vector<string> foo::createBar(const vector<string>& vec)
    {
      vector<string> res(vec);
      // do something
      return res;
    }
    #else
    foo::foo(const vector<string>& vec)
      : bar(vec)
    { }
    
    void foo::setupBar()
    {
      // Nicht wirklich toll, aber du weisst ja (hoffentlich:)) was du machst
      vector<string>& refbar = *const_cast<vector<string>*>(&bar);
      // do something
    }
    #endif
    

    Würde aber fast vermuten dass es schlicht an deinem Design liegt. Erkläre doch einfach mal was du machen willst, nicht wo die Probleme deiner Lösung sind...


Anmelden zum Antworten