spec: template instantiations

Paul Backus snarwin at gmail.com
Sat Nov 21 00:40:34 UTC 2020


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);


More information about the Digitalmars-d mailing list