Creating an array of default-constructed class instances

Jos van Uden usenet at fwend.com
Sun Feb 10 01:48:04 PST 2013


On 10-2-2013 7:14, Simon wrote:
> Hi, I'm new to the D programming language.  Overall I'm liking
> things very much, but I'm still getting the hang of a few things.
>
> Here's a basic programming pattern: I have a class called Thing,
> and while I'm coding I decide I need N Thing instances.
>
> In C++ that's a matter of
>
> std::vector<Thing> things(N);
>
> In python, I can use a list comprehension.
>
> things = [Thing() for _ in range(N)]
>
> However, the obvious D version doesn't work.
>
> auto things = new Thing[N];
>
> Because Thing.init is null, this produces an array of null
> references.  Of course, I can write a for loop to fill in the
> array after creation, but this feels very un-D-like.  Is there a
> straightforward way to create a bunch of class instances?

import std.stdio, std.algorithm;

class Thing {
     int i;
     this(int i) {
         this.i = i;
     }
}

void main()
{
    auto things = new Thing[10];
    fill(things, new Thing(5));

    foreach (t; things)
         writef("%d ", t.i);
}


More information about the Digitalmars-d-learn mailing list