Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
June 19, 2014 how can I ensure that a template instantiation is unique? | ||||
---|---|---|---|---|
| ||||
I'm instantiating a couple of template structs that conflict with each other. I'd like them to be unique types, automatically. So I tried this: template Foo (string unique_id = __FILE__~__LINE__.to!string) {...} but it didn't work. When I use this for templated functions, I get the file and line number where the function is instantiated. But in this case, I got the file and line number where the template was defined. Is there anything I can do to make sure each instantiated type is unique? |
June 19, 2014 Re: how can I ensure that a template instantiation is unique? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Vlad Levenfeld | On 6/19/14, 1:48 AM, Vlad Levenfeld wrote: > I'm instantiating a couple of template structs that conflict with each > other. I'd like them to be unique types, automatically. So I tried this: > > template Foo (string unique_id = __FILE__~__LINE__.to!string) > {...} > > but it didn't work. When I use this for templated functions, I get the > file and line number where the function is instantiated. But in this > case, I got the file and line number where the template was defined. > > Is there anything I can do to make sure each instantiated type is unique? I don't think you want to set a default value. If you pass "__FILE__~__LINE__.to!string" during instantiation, it works every time: template Foo(string uniqueId) { alias Foo = uniqueId; } void main() { Foo!(__FILE__~__LINE__.to!string).writeln; } |
June 19, 2014 Re: how can I ensure that a template instantiation is unique? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Vlad Levenfeld | On Thursday, 19 June 2014 at 05:48:24 UTC, Vlad Levenfeld wrote: > I'm instantiating a couple of template structs that conflict with each other. I'd like them to be unique types, automatically. So I tried this: > > template Foo (string unique_id = __FILE__~__LINE__.to!string) > {...} > > but it didn't work. When I use this for templated functions, I get the file and line number where the function is instantiated. But in this case, I got the file and line number where the template was defined. > > Is there anything I can do to make sure each instantiated type is unique? Maybe something like this: http://dpaste.dzfl.pl/ce479a2f87f4 |
June 19, 2014 Re: how can I ensure that a template instantiation is unique? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrea Fontana | On Thursday, 19 June 2014 at 07:26:12 UTC, Andrea Fontana wrote:
> On Thursday, 19 June 2014 at 05:48:24 UTC, Vlad Levenfeld wrote:
>> I'm instantiating a couple of template structs that conflict with each other. I'd like them to be unique types, automatically. So I tried this:
>>
>> template Foo (string unique_id = __FILE__~__LINE__.to!string)
>> {...}
>>
>> but it didn't work. When I use this for templated functions, I get the file and line number where the function is instantiated. But in this case, I got the file and line number where the template was defined.
>>
>> Is there anything I can do to make sure each instantiated type is unique?
>
> Maybe something like this:
> http://dpaste.dzfl.pl/ce479a2f87f4
Of course Foo2 could be an enum :)
|
June 19, 2014 Re: how can I ensure that a template instantiation is unique? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrea Fontana | Thanks! Mixin strings can punch through anything. |
Copyright © 1999-2021 by the D Language Foundation