On Wed, Nov 13, 2013 at 2:02 PM, Antony Polukhin
2013/11/13 Andrey Semashev
On Wed, Nov 13, 2013 at 1:28 PM, Antony Polukhin
wrote: 2013/11/13 Gavin Lambert
Or how about: * const char *name() : returns whatever std::type_info::name does [if RTTI] * std::string short_name() : returns the raw/mangled name * std::string long_name() : returns the long/demangled name
Or flip the components (name_short and name_long) if you prefer; it sorts better but reads worse that way, I think.
(With RTTI disabled, all three would probably return the same value.)
This is a good idea, thanks! Using it less user code will be broken.
Do you like the following names: * const char* name() // minor behavior change on MSVC * const char* name_mangled() // this method must be added * std::string name_demangled() // remains exactly the same
I haven't had the chance to review the library (yet), but I second that boost::type_info::name() should be equivalent to std::type_info::name(), including MSVC.
All special logic of demangling should be implemented in a new function, like name_demangled (and let me suggest a few other names for it - readable_name(), pretty_name()).
name_mangled() is controversial because formally you have no guaranteed way to acquire a mangled name of the type. Some compilers provide it, others don't. I assume, you don't want to implement mangling algorithms for these compilers, so I'm in favor of removing this function or at least changing its semantics and name to something less obligatory, like raw_name() or underlying_name().
Agreed.
People may use auto-fill in IDE a lot (I do), so maybe starting methods from name_* is more auto-fill friendly:
* const char* name() // same as std::type_info::name() * const char* name_raw() // * std::string name_pretty() // was name_demangled()
In this way you just type name_ and see all the available name methods.
IMHO, it's better when the names differ from the beginning, so you don't have to select the variant in the combo-box. It's enough to just press 'n', 'r' or 'p' to get the required function first in the list. Also, some IDE's allow to select auto-completion choices based on substrings in any part of the function name, not just the beginning. In any case, I think a clear name is more important than trying to make it work nicely in a particular IDE. There are many IDEs, of varying qualities and levels of sophistication, and in the end the only thing that matters is the code.