Template mixins - why only declarations
Frustrated
Frustrated at nowhere.com
Thu Mar 6 10:31:01 PST 2014
On Thursday, 6 March 2014 at 17:27:35 UTC, Steve Teale wrote:
> Pretty much what the subject says. Why can't template mixins
> include statements ans so on?
>
> Is it just too hard, or is it just too much like C macros?
>
> Steve
template mixins mix in directly into the code as if you typed
them. If they contained statements then you could mixin
statements into classes, say, and it would then be illegal.
I guess there is no reason per se, but I guess that wasn't the
desired behavior for template mixins. I imagine there could be a
definite downside to having template mixins containing
statements. Also, they can't be self contained.
e.g.,
mixin template C()
{
i = i + 1; // invalid
}
...
int i = 0;
mixin C();
The template itself can't be semantically checked in place
because i is unknown inside the template. (it is not self
contained so to speak)
In any case, just seems wrong for templates to do that. They are
not grouping expressions but grouping definitions and
declarations of things so you don't have to do them multiple
times.
string mixins, OTOH, could do the above.
template C()
{
string C()
{
return "i = i + 1;";
}
}
...
int i = 0;
mixin(C);
and this will work. This is because the statement is contained
within a string and the compiler simply inserts the string
directly. The template can still be validated in place(since "i =
i + 1" is a string and has no other meaning in the template).
More information about the Digitalmars-d-learn
mailing list