On Thursday, 24 December 2020 at 10:23:09 UTC, Dmitriy Asondo wrote:

I expect code like this:
----------------------
class OloloService {}
class BlablaService {}

auto servicesList = [OloloService, BlablaService];
auto serviceInstance = new servicesList[1](args);
----------------------

Here's a slightly different version that I think is closer to your original example:

import std;

interface Service {}

mixin template Constructor()
{
    this(int a)
    {
    }
}

class OloloService : Service
{
    mixin Constructor;
}

class BlablaService : Service
{
    mixin Constructor;
}

Service function(int) create(T)()
{
    return a => new T(a);
}

void main()
{
auto servicesList = [create!OloloService, create!BlablaService];
    auto serviceInstance = servicesList[1](3);
    writeln(serviceInstance);
}

Since D is a statically typed language you need a form of base type if you want to store a list of values of different types. In this case, the base type is `Service`. If you want to have a constructor, as you do in your original example, the constructor needs to have the same signature for all types, the mixin template helps with that.

You can use a tuple as well to store different values of different types. But then everything need to be known at compile time. That is, the index, in your case.

--
/Jacob Carlborg

Reply via email to