std::basic_string<T> erweitern?



  • Hi ihrs!

    der destructor von std::basic_string ist leider nicht virutal, gibt es eine möglichkeit diese Klasse mit weiteren methoden zu erweitern? z. B. einer Trim-Funktion oder ähnlichem?

    In C# gibt es ja sog. extensions, gibt es sowas in C++ auch oder eine andere Möglichkeit eine trim-Methode in std::basic_string oder einer ableitung, kapselung oder ähnlichem, diese Methode einzubauen?



  • Hier lohnt sich die Implementierung einer globalen Funktion mehr. Einige beklagen sich jetzt schon, dass std::basic_string viel zu überladen wäre.

    Kombiniert mit den STL-Algorithmen stehen dir sehr viele Möglichkeiten zur Manipulation offen.



  • globale funktionen sind aber nicht gerade nicht gerade objektorientiert? Hab schon gedacht ggf. ein Adapter-Pattern einzusetzen, aber die handhabung dann ist mehr als "murks". globale funktion finde ich bäh.



  • das mna das 2008 noch selber machen muss 👎



  • Wie du selbst schon vorgeschlagen hast, würde ich auch std::string einfach kapseln, ungefähr so wie die string-Klasse das selbst mit einem char-Array macht (wenn auch das keine Klasse ist).



  • @ moagnus
    die frage ist dann nur, wie ich den zugriff steuere, damit die handhabung equal mit dem von std::basic_string ist.

    also so:

    my_string test ("hallo");
    test.find_last_not_of ("l"); // std::basic_string methode
    test.trim (); // meine methode
    


  • Hard Coder schrieb:

    globale funktionen sind aber nicht gerade nicht gerade objektorientiert? [...] globale funktion finde ich bäh.

    Naja, du musst es wissen. Wahrscheinlich hast du diese Einstellung, weil du von C# kommst. C++ ist aber nicht rein objektorientiert; globale Funktionen haben durchaus ihre Berechtigung. Schau dir doch mal die STL-Algorithmen an, die sind ein gutes Beispiel dafür.

    Hard Coder schrieb:

    die frage ist dann nur, wie ich den zugriff steuere, damit die handhabung equal mit dem von std::basic_string ist.

    Mit Aggregation wirst du nicht darum herum kommen, jede Methode einzeln zu kapseln.


Anmelden zum Antworten