Template questions
Edward Diener
eddielee_no_spam_here at tropicsoft.com
Sat Mar 22 18:20:32 PDT 2008
Bill Baxter wrote:
> Edward Diener wrote:
>> I am going to be asking a number of questions about D templates in
>> various posts, and I hope others can help me understand D templates
>> despite the documentation.
>>
>> First question:
>>
>> In the documentation on templates I read these lines:
>>
>> "Even if template arguments are implicitly converted to the same
>> template parameter type, they still refer to different instances:
>> struct TFoo(int x) { }
>> static assert(is(TFoo!(3) == TFoo!(2 + 1))); // 3 and 2+1 are both 3
>> of // type
>> int
>> static assert(!is(TFoo!(3) == TFoo!(3u))); // 3u and 3 are different
>> // types"
>>
>> To what is the "int" on line 6 refer ?
>> Why is line 3 considered a D template ? It does not begin with
>> 'template ...'. It looks like a simple 'struct' to me with a public
>> member. How then can it be instantiated as if it were a template ?
>
> struct TFoo(int x) { .. }
>
> is shorthand in D for
>
> template TFoo(int x) {
> struct TFoo { .. }
> }
>
> Just like how with D function templates this
>
> void Foo(int x)() { .. }
>
> is shorthand for this:
>
> template Foo(int x) {
> void Foo() { .. }
> }
Please explain the rules for this "shorthand". I can not find them in
the PDF documenatation.
Is the rule that this applies only if there is a single data field in
the struct/class class, with no other data or member functions of any
kind, or a single parameter in the function case ?
If that is the rule, how does one define a class/struct with a single
daya parameter which is not a template, or does one just give up on such
a type ?
If that is the rule how does one define a function which takes a single
parameter which is not a template function, or does one just give up on
such a function ?
More information about the Digitalmars-d
mailing list