Where does the template parameter E come from?
David Nadlinger
see at klickverbot.at
Mon Mar 28 08:22:31 PDT 2011
On 3/28/11 5:14 PM, simendsjo wrote:
> On 28.03.2011 17:07, David Nadlinger wrote:
>> On 3/28/11 4:54 PM, simendsjo wrote:
>>> When running compose with two arguments, the implementation uses the
>>> template parameter E. I don't understand what's going on here as E isn't
>>> submitted to the template - what type is E?
>>> […]
>>> typeof({ E a; return fun0(fun1(a)); }()) doIt(E)(E a)
>>> { […] }
>>
>> doIt is a function template, so E will be deduced to be whatever type
>> the passed argument is – you won't notice the extra »template layer« as
>> E is automatically inferred from the argument.
>>
>> For better understanding, you might want to look at the definition like
>> this:
>>
>> ---
>> template composeImpl(fun...) {
>> […]
>> template doIt(E) {
>> typeof({ E a; return fun0(fun1(a)); }()) doIt(E a) {
>> […]
>> }
>> }
>> }
>> ---
>>
>> David
>
> Thanks. That seems like a good way of mentally mapping template usage
> until it comes more naturally.
Even more, due to the eponymous template »trick«, there is almost no
difference between the forms – with the important exception being that
function templates enjoy IFTI (implicit function template
instantiation), the feature which allows you to omit the type
parameter(s) if it can be deduced from the arguments.
David
More information about the Digitalmars-d-learn
mailing list