On Tuesday, 20 February 2018 at 13:39:17 UTC, bauss wrote:
On Tuesday, 20 February 2018 at 12:55:31 UTC, psychoticRabbit
wrote:
On Tuesday, 20 February 2018 at 12:45:25 UTC, rikki cattermole
wrote:
string creater() pure {
return "void func() {}";
}
mixin(creator());
That is why. There are plenty of functions, classes and
structs that simply won't exist in the form of syntax until
you execute CTFE.
I think I'd fire anyone that wrote functions in that way ;-)
Why would you fire someone for writing idiomatic D?
It was kind of a bad example given, but there are legitimate
reasons to generate functions like that.
Ex.
mixin template Property(T, string name)
{
mixin("private T _" ~ name ~ ";");
@property
{
mixin("T " ~ name ~ "() { return _" ~ name ~ "; }");
mixin("void " ~ name ~ "(T newValue) { _" ~ name ~ " =
newValue; }");
}
}
mixin template ReadProperty(T, string name)
{
mixin("private T _" ~ name ~ ";");
@property
{
mixin("T " ~ name ~ "() { return _" ~ name ~ "; }");
}
}
mixin template WriteProperty(T, string name)
{
mixin("private T _" ~ name ~ ";");
@property
{
mixin("void " ~ name ~ "(T newValue) { _" ~ name ~ " =
newValue; }");
}
}
I should probably have put an example usage to show how it's used:
class Foo
{
mixin Property!(int, "bar");
mixin Property!(string, "baz");
}
void main()
{
auto foo = new Foo;
foo.bar = 100;
foo.baz = "Hello";
import std.stdio;
writeln(foo.bar);
writeln(foo.baz);
}