www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Print out the name of a type

reply Joseph Rushton Wakeling <joseph.wakeling webdrake.net> writes:
Suppose I've got a function that is conditional on a type:

    void foo(T)(/* input vars */) { ... }

How could I print out using writeln the name of that type?  So that if I call

    foo!double(...);

... I would see:

    Today, Michael, I'm going to be a double!

... whereas if I give it,

    foo!uint(...);

I'd see

    Today, Michael, I'm going to be a uint!

and so on.  Ideally this should also work for complex data types such as
structs, classes, etc.
Jul 04 2013
next sibling parent "Dicebot" <public dicebot.lv> writes:
On Thursday, 4 July 2013 at 14:46:36 UTC, Joseph Rushton Wakeling 
wrote:
 ...
Each has own disadvantages, chose one ;) T.stringof // simple & reliable, won't work for function aliases __traits(identifier, T) // only symbols std.traits.fullyQualifiedName!T // issues with templated types, includes module/package into name
Jul 04 2013
prev sibling parent "monarch_dodra" <monarchdodra gmail.com> writes:
On Thursday, 4 July 2013 at 14:51:21 UTC, Artur Skawina wrote:
 On 07/04/13 16:46, Joseph Rushton Wakeling wrote:
 Suppose I've got a function that is conditional on a type:
 
     void foo(T)(/* input vars */) { ... }
 
 How could I print out using writeln the name of that type?  So 
 that if I call
 
     foo!double(...);
 
 ... I would see:
 
     Today, Michael, I'm going to be a double!
writeln("Today, Michael, I'm going to be a "~T.stringof~"!") artur
What he said. Or if you don't even have T, use "typeof(t).stringof". This also works in pragma msg: pragma(msg, T.stringof);
Jul 04 2013