Changing the template defintion syntax.
Robert DaSilva
sp.unit.262+digitalmars at gmail.com
Mon Dec 17 21:36:21 PST 2007
Jari-Matti Mäkelä wrote:
> On Sat, 15 Dec 2007, Robert DaSilva wrote:
>
>> One thing that has bugged me for a while is the in symmetry of how
>> template are defined and used. If template were defined with !() instead
>> of () it would also allow multi-level template to be defined with out
>> the "same name as template" kludge.
>> For example
>> U to!(U)!(T)(T t);
>
> I think you're confusing a lot of things here. Changing the syntax isn't
> enough to make the static parameters of a functions partially
> applicable. Also I'm not sure if a change in the syntax is needed. You
> could achieve the same thing with implicit currying.
The main reason for the suggestion is the symmetry, I'm just adding
thinks that would possible with the syntax change.
>
> Another thing is that what you're showing here isn't the only thing that
> can be done with nested templates. The C++ style "anonymous"
> parametrization is cleaner in this case, but in D you can also change
> the declaration type inside the template:
>
> template foo(int i) {
> static if(i == 0)
> class foo {}
> else
> int foo;
> }
>
>
>> And while on the note of to, it would be nice if cast used template
>> syntax (as well as any keyword function that took or returned types
>> (const, invariant, typeof, typeid, etc.)).
>
> Why?
Consistency.
>
>>
>> Also the template keyword could be replace with a generic namespace
>> keyword.
>
> What? Templates form a namespace, but that doesn't mean templates are
> equivalent to namespaces. What would be useful though is to be able to
> instantiate templates with no parameters or templates with only
> parameters with default values without using !() syntax. But then, how
> would one differentiate between template symbol and instantiation.
I never said they were the same thing. But a templated namespace is
equivalent to the current template implementation.
>
>>
>> We could even let all definitions be templatable
>> T template_variable!(T);
>> I don't know how practicable or use full that would be though.
>
> Huh?
It would be the same as
template template_variable(T)
{
T template_variable;
}
More information about the Digitalmars-d
mailing list