Nur so am Rande, Vererbung ist hierfür ganz sicher keine gute Wahl. Spätestens wenn du einen angepassten String, übergeben mit dem Typ der Oberklasse (i.d.F. also std::string), kopierst (und Strings werden zwangsläufig ständig kopiert), hast du wieder einen Byte-Puffer, und alle Mühe war umsonst. Damit das halbwegs sinnvoll wird, bräuchtest du ein echtes String-Interface. Das geht jedoch voll an der Idee der STL vorbei, Polymorphie ohne Overhead zur Compilezeit zu realisieren, indem das implizite Interface (= Methoden und Funktionen mit Namen und Signatur, nicht virtual) bei wechselndem Typ gleichbleibt. Deshalb ist es schon ganz richtig, dass STL-Klassen nicht zur Ererbung gedacht sind, sondern neue Klassen einfach ohne Vererbung das implizite Interface übernehmen.BeRsErKeR hat geschrieben:Das Interface kann mMn schon beibehalten werden, muss aber halt noch erweitert werden. Schau dir mal Glib::ustring an. Das Interface ist weitestgehend identisch zum std::string und wurde um bestimmte Methoden erweitert. Die Implementierung/Funktionalität muss natürlich geändert werden und genau dafür wären halt virtuelle Methoden und public Vererbung wichtig.
Eine bessere Lösung für eine reine Erweiterung wäre, char_traits um entsprechende Trait-Methoden oder -Eigenschaften (z.B. n-tes Zeichen oder Indexoperator ja/nein?) zu ergänzen, auch das wäre jedoch nur bedingt sinnvoll, weil einige Methoden wohl zwangsläufig von O(1) zu O(n) wechseln würden.
Nachtrag: Tatsächlich ist Glib::ustring alles andere als konform, so kann es beispielsweise zwangsläufig keine veränderbaren Referenzen auf einzelne Zeichen zurückgeben. Das std::string-Interface ist damit für derlei Zwecke wohl einfach gänzlich ungeeignet.