"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...