On 03/02/2011 08:56 PM, Peter Lundgren wrote:
Where can I go to learn about parameterized structs? I can't seem to find any
literature on the subject. In particular, what are you allowed to use as a
parameter? I would like to define a struct like so:

struct MyStruct(T, T[] a) {
     ...
}

but I receive the following error:

Error: arithmetic/string type expected for value-parameter, not T[]

Are arrays not allowed?

Are you trying to parametrize by the type of the container or just trying to use an array of a specified type? (As opposed to say, a linked list of the specified type?)

If the former, it's simple. And the simplest thing is to just use an array in the implementation:

struct S(T)
{
    T[] a;

    void foo(T element)
    {
        /* Just use like an array */
        a ~= element;
        a[0] = element;
    }
}

void main()
{
    auto s = S!double();
    s.foo(1.5);
}

If you want to use a different container of the specified T, then a second template parameter can be used. This one uses an array as the default one:

class SomeContainer
{}

struct S(T, Cont = T[])
{
    Cont a;

    void foo(T element)
    {
        /* This time the use must match the allowed container types */
    }
}

void main()
{
    auto s = S!(double, SomeContainer)();
    s.foo(1.5);
}

I would recommend pulling information out ;) of this page:

  http://digitalmars.com/d/2.0/template.html

"Template Alias Parameters" is very different after C++ and can be very powerful:

  http://digitalmars.com/d/2.0/template.html#TemplateAliasParameter

Ali

Reply via email to