Thread overview | ||||||
---|---|---|---|---|---|---|
|
November 20, 2020 spec: template instantiations | ||||
---|---|---|---|---|
| ||||
I don't under this: https://dlang.org/spec/template.html#instantiation_scope The text seems to contradict the example. If a template declares multiple entities then is it possible to instantiate all of them at one or is each entity instantiated separately? Suppose we have: template Transformer(From, To) // From and To are types, too { To transform(From from) { import std.conv; return to!(To)(from); } class Modificator { From f; To t; this(From f) { /*...*/ } } } Then is there way to instantiate both 'transform' and 'Modificator' at once? |
November 20, 2020 Re: spec: template instantiations | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dibyendu Majumdar | On Friday, 20 November 2020 at 20:59:56 UTC, Dibyendu Majumdar wrote:
> I don't under this:
>
> https://dlang.org/spec/template.html#instantiation_scope
>
> The text seems to contradict the example.
>
Please ignore - my mistake.
|
November 21, 2020 Re: spec: template instantiations | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dibyendu Majumdar | On Friday, 20 November 2020 at 20:59:56 UTC, Dibyendu Majumdar wrote:
>
> If a template declares multiple entities then is it possible to instantiate all of them at one or is each entity instantiated separately?
>
> Suppose we have:
>
> template Transformer(From, To) // From and To are types, too
> {
> To transform(From from)
> {
> import std.conv;
> return to!(To)(from);
> }
>
> class Modificator
> {
> From f;
> To t;
> this(From f) { /*...*/ }
> }
> }
>
> Then is there way to instantiate both 'transform' and 'Modificator' at once?
I suppose answer is no? So when instantiating, it is always a particular member of the template that is instantiated?
|
November 21, 2020 Re: spec: template instantiations | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dibyendu Majumdar | On Saturday, 21 November 2020 at 00:24:43 UTC, Dibyendu Majumdar wrote:
> On Friday, 20 November 2020 at 20:59:56 UTC, Dibyendu Majumdar wrote:
>>
>> Suppose we have:
>>
>> template Transformer(From, To) // From and To are types, too
>> {
>> To transform(From from)
>> {
>> import std.conv;
>> return to!(To)(from);
>> }
>>
>> class Modificator
>> {
>> From f;
>> To t;
>> this(From f) { /*...*/ }
>> }
>> }
>>
>> Then is there way to instantiate both 'transform' and 'Modificator' at once?
>
> I suppose answer is no? So when instantiating, it is always a particular member of the template that is instantiated?
Quite the opposite. When you instantiate a template, the entire template body is instantiated at the same time. You can then access individual members using the `.` operator. So for example:
alias Instance = Transformer!(int, string);
Instance.Modificator m = new Instance.Modificator(123);
string s = Instance.transform(123);
|
Copyright © 1999-2021 by the D Language Foundation