James Kanze
10/17/2008 7:17:00 AM
On Oct 16, 2:41 pm, "Marco Nef" <maill...@shima.ch> wrote:
> > > Thanks for your replies. I know about typeid and it is not
> > > sufficient as "typeid->name" by the standard is not
> > > persistent and not even unique.
> > What do you mean by "persistent" in this case?
> My source for that is the book "Modern C++ Design" by Andrei
> Alexandrescu, p. 206: "The way type_info::name is defined
> makes it unsuitable for anything other than debuggin purposes.
> There is no guarantee that the string is the actual class
> name, and worse, there is no guarantee that the string is
> unique throughout the application."
> ...
> "There is no guarantee that typeid(Line).name() points to the
> same string when the application is run twice."
Aha. You mean that you can't use it as a type identifier in
persistent data.
The standard says that the string is implementation defined, and
in fact, an implementation which always returned "" would be
conforming. On the other hand, there are expectations due to
quality of implementation, which no compiler would dare neglect;
at the very least, you can certainly count on the string being
the same every time the function is called for the same type,
even in different runs, at least for non-local types (as long as
you haven't recompiled with a different compiler---or a
different version of the same compiler), and on the string being
different for classes with different basic names. In practice,
as long as the class isn't local or in an anonymous namespace, I
think you're OK.
Which, admittedly isn't very much, and I generally wouldn't use
it as a type identifier in external data (transmission protocols
or persistent data).
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34