Template question

Chad J "gamerChad\" at spamIsBad gmail.com
Wed Oct 4 20:21:39 PDT 2006


Thomas Kuehne wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Chad J schrieb am 2006-10-04:
> 
>>Sean Kelly wrote:
>>
>>>Chad J > wrote:
>>>
>>>
>>>>I'm trying to write a template that, when instantiated, gives a value 
>>>>that is the same as the last time it was instantiated plus one.
>>>
>>>
>>>I don't think this is possible.  Once a template is evaluated that's it. 
>>> Future references to a template do not cause a re-evaluation.
>>>
>>>
>>>Sean
>>
>>Oh, bummer.  Is there another way to do what I want to do at 
>>compile-time, besides just manually writing the numbers in?
> 
> 
> Here is a kludge(limitation: only UID instantiation per line and file allowed):
> 
> #
> # template UID(char[] file, int line){
> #     const uint UID = line * Hash!(file);
> # }
> # 
> # template Hash(char[] seed){
> #     static if(seed.length == 1){
> #         const uint Hash = seed[0];
> #     }else{
> #         const uint Hash = Hash!(seed[1 .. $]) * 9 + seed[0];
> #     }
> # }
> # 
> # const x = UID!(__FILE__, __LINE__);
> # const y = UID!(__FILE__, __LINE__);
> #
> 
> Thomas
> 
> 
> -----BEGIN PGP SIGNATURE-----
> 
> iD8DBQFFJF8MLK5blCcjpWoRArtDAJ42K2nEhKcEWNvpp3q+LjHVdBzAfwCfa8dT
> rS6sQyT7s1XUic1TLz3Y2+A=
> =+5nW
> -----END PGP SIGNATURE-----

Maybe I'm wrong, but it seems like it can't guarantee uniqueness due to 
hashing of the files.  Anyhow, it's a useful template to keep in mind.

Thanks for that!



More information about the Digitalmars-d-learn mailing list