Re: Cleverly extending the std::string class
On Mar 19, 7:58 pm, Giuliano Bertoletti <gbe32...@libero.it> wrote:
just wondering if there's a clever way to extend the
functionality of std::string (without using boost).
Newer programming languages like python do have a lot of
functionality associated with strings, which may be handy in
C++.
For example lowercasing and uppercasing the string.
Extracting the last element by subscripting -1, or the last
say four chars using [-4:-1] are also desirable.
These functionalities could be accomodated by proper function
calls.
Exactly.
If I derive a class from std::string I have all the
std::string member functions return the base class and not the
derived class.
So for example I would have to write:
std::string p = "test";
std::string q = ((MYSTRING)p).lower()
Which would result in undefined behavior.
while I would prefer to work only with MYSTRING.
MYSTRING p;
MYSTRING q = p.lower();
but then if I call:
q = p.substr(0,4)
substr returns an std::string and not a MYSTRING.
Is this the wrong place where to use inheritance ?
Yes. If you want a string class with different behavior, then
write one. It's not an std::string (although it might use an
std::string in its implementation). If you simply want
functions which operate on a string, then there's nothing wrong
with providing such functions; I do so (in the most recent
versions of my library, in two forms: one which supposed UTF-8
encoding, and the other which is based on the locale dependent
single byte encoding).
In either case, deriving from std::string is probably not a good
solution.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34