On Fri, Oct 19, 2012 at 10:32:48PM -0700, H. S. Teoh wrote:
> On Sat, Oct 20, 2012 at 03:06:56AM +0200, bearophile wrote:
> > I'd like to write code like this (the constructors of the structs
> > must take 1 argument):
> > 
> > // some imports here
> > void main() {
> >     BigInt[] data1 = [5, 6, 9];
> >     Ranged!(int,5,10)[] data2 = [5, 6, 9];
> >     Nibble[] data3 = [1, 2, 15]; // Nibble.sizeof == 1
> >     alias Typedef!int Mint;
> >     Mint[] data4 = [5, 6, 9];
> > }
> > 
> > 
> > Do you like this feature?
> [...]
> 
> What about mixin() with a CTFE function that expands an array of
> initializers at compile-time? Something like:
[...]

OK, here's a tested, working example:

        import std.stdio;
        string structArray(S)(string[] args...) {
                string s = "[";
                string delim = "";
                foreach (a; args) {
                        s ~= delim ~ S.stringof ~ "(" ~ a ~ ")";
                        delim = ",";
                }
                return s ~ "]";
        }
        struct AStruct {
                int x, y;
        }
        void main() {
                AStruct[] arr = mixin(structArray!AStruct("1,1", "1,2", "2,2", 
"2,3"));
                writeln(arr);
        }


T

-- 
"Life is all a great joke, but only the brave ever get the point." -- Kenneth 
Rexroth

Reply via email to