Feature request - simpler constructors
Robert Fraser
fraserofthenight at gmail.com
Fri Sep 21 12:40:49 PDT 2007
Daniel Keep Wrote:
>
> This is just silly. There's no reason to make this a *language*
> feature. I mean, we have templates and mixins for a reason! To whit:
>
> module lazy_janice;
>
> import std.metastrings;
> import std.stdio : writefln;
> import std.string : format;
>
> template Tuple(T...)
> {
> alias T Tuple;
> }
>
> template lazyJaniceInit(uint i)
> {
> const lazyJaniceInit = "";
> }
>
> template lazyJaniceInit(uint i, alias Member, Members...)
> {
> const lazyJaniceInit =
> Member.stringof~" = args["~ToString!(i)~"];\n"
> ~ lazyJaniceInit!(i+1,Members);
> }
>
> template lazyJaniceArgs()
> {
> alias Tuple!() lazyJaniceArgs;
> }
>
> template lazyJaniceArgs(alias Member, Members...)
> {
> alias Tuple!(typeof(Member), lazyJaniceArgs!(Members))
> lazyJaniceArgs;
> }
>
> template lazyJanice(Members...)
> {
> this(lazyJaniceArgs!(Members) args)
> {
> mixin(lazyJaniceInit!(0, Members));
> }
> }
>
> class Foo
> {
> int a;
> float b;
>
> mixin lazyJanice!(a,b);
>
> string toString()
> {
> return "Foo(%s,%s)".format(a,b);
> }
> }
>
> void main()
> {
> auto foo = new Foo(42,3.1413);
> writefln(foo);
> }
>
> Easy as can be. You might want to rename the template, though... :3
>
> -- Daniel
Not a fan of the whole CTFE craze?
More information about the Digitalmars-d
mailing list