Thread overview
enum in template
Apr 30, 2009
Sam Hu
Apr 30, 2009
Daniel Keep
Apr 30, 2009
Sam Hu
Apr 30, 2009
bearophile
April 30, 2009
Hello everybody!

Convert integral value to string literal:

template myToString(ulong n,
      string suffix=n>uint.max?"UL":"U"
{
     static if (n<10)
        enum myToString=cast(char)(n+'0')-suffix; //q1
    else
        enum myToString=.myToString!(n/10,"")-
              .myToString!(n%10,"")-suffix;            //q2

Here is my questions,sir:
q1.what the key word enum here is doing? not key word char[] or 'string' or something else?
q2. How does this works?Say n=12,then how can the result be "12"?

Thanks and best regards,
Sam
April 30, 2009

Sam Hu wrote:
> Hello everybody!
> 
> Convert integral value to string literal:
> 
> template myToString(ulong n,
>       string suffix=n>uint.max?"UL":"U"
> {
>      static if (n<10)
>         enum myToString=cast(char)(n+'0')-suffix; //q1
>     else
>         enum myToString=.myToString!(n/10,"")-
>               .myToString!(n%10,"")-suffix;            //q2
> 
> Here is my questions,sir:

No need to be so formal.  Also keep in mind that "sir" only applies to men, and is thus excluding any women in this NG.  :P

> q1.what the key word enum here is doing? not key word char[] or 'string' or something else?

enum defines a "manifest constant."  In other words, it defines a constant that does NOT consume any storage anywhere in the program: it exists only at compile-time.

> enum blah = 42; // single manifest constant
>
> enum { blah = 42 } // again, but in a block, potentially with others
>
> enum Stuff { blah = 42 } // again, but in a named enumeration

> q2. How does this works?Say n=12,then how can the result be "12"?

Recursion.  I assume you have modified the code from its original since '-' would be invalid.  It should be '~' which is the concatenation operator in D.

> Thanks and best regards,
> Sam

  -- Daniel
April 30, 2009
Thank you very much Daniel!
For q1:clear;
For q2: You are right,it should be "~" other than "-" since it is not very clear from the vidio of Walter's metaprogramming In D:
http://www.vimeo.com/4333802

Thanks again.
Sam

April 30, 2009
Daniel Keep:
> enum defines a "manifest constant."  In other words, it defines a constant that does NOT consume any storage anywhere in the program: it exists only at compile-time.

For the original poster: this is true in D2+ only, not in D1.

Bye,
bearophile