Thread overview | |||||
---|---|---|---|---|---|
|
January 11, 2019 Getting template parameters by its name | ||||
---|---|---|---|---|
| ||||
I want to do something like this: ---- template S(T) { } void main() { pragma(msg, S!(int).T); // Error: no property `T` for type `void` } ---- Using alias, it is possible to get T by another name: ---- template S(T) { alias t = T; } void main() { pragma(msg, S!(int).t); } ---- But the same identifier cannot be used: ---- template S(T) { alias T = T; // Error: `alias T = T;` cannot alias itself, use a qualified name to create an overload set } void main() { pragma(msg, S!(int).T); } ---- Is there any nice way that `S!(int).T` works? |
January 11, 2019 Re: Getting template parameters by its name | ||||
---|---|---|---|---|
| ||||
Posted in reply to Yui Hosaka | On Friday, 11 January 2019 at 04:59:50 UTC, Yui Hosaka wrote: > I want to do something like this: > > ---- > template S(T) { > } > > void main() { > pragma(msg, S!(int).T); // Error: no property `T` for type `void` > } > ---- You can get the arguments of a template instance as an AliasSeq using `std.traits.TemplateArgsOf`. https://dlang.org/phobos/std_traits.html#TemplateArgsOf |
January 12, 2019 Re: Getting template parameters by its name | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul Backus | On Friday, 11 January 2019 at 06:13:11 UTC, Paul Backus wrote:
> On Friday, 11 January 2019 at 04:59:50 UTC, Yui Hosaka wrote:
>> I want to do something like this:
>>
>> ----
>> template S(T) {
>> }
>>
>> void main() {
>> pragma(msg, S!(int).T); // Error: no property `T` for type `void`
>> }
>> ----
>
> You can get the arguments of a template instance as an AliasSeq using `std.traits.TemplateArgsOf`.
>
> https://dlang.org/phobos/std_traits.html#TemplateArgsOf
It seems a good choice to me. Thank you!
|
Copyright © 1999-2021 by the D Language Foundation