On 01/07/2010 22:59, Steven Schveighoffer wrote:
On Thu, 01 Jul 2010 15:36:53 -0400, BLS <windev...@hotmail.de> wrote:

Hi, I have a problem with a mixin template. More exact with an
Arraylist!T within a mixin template.
Given.
void main() {
auto p = new Person("Hans", 32);
p ~= new Person("Steve", 40);
p ~= new Person("Bjoern", 101);
}

class Person {
private string _name;
private uint _age;

mixin TLinkList;

this(string name, uint age) {
this._name = name;
this._age = age;
}
}

mixin template TLinkList() {
alias typeof(this) T;
alias ArrayList!T TList;

T[] pa;
auto pl = new TList(pa); // This does not work !
void opCatAssign(T v) {
pa ~= v;
}
}
Error: non-constant expression new ArrayList(pa) main.d

Ideas ?
Thanks Bjoern

I'm thinking it has to do with you trying to create a member with that
line.

I think a member initializer has to be a constant expression, like int i
= 1. Anything else has to be done in the constructor. This kinda sucks,
because you can't initialize members with their defaults where you
declare them, but it's the way D works.

-Steve
Thanks for the feedback Steve.
IMHO it should work.. One reason is that C.E. Miller has created a Circularly-linked list module, containing a portable linked list template mixin. Indeed Christophers implementation is different in that the LinkList is part of the mixin template...

http://www.dprogramming.com/list.php

2) Commenting the auto pl = new TList() line out makes the snippet work.

mixin template TLinkList() {
        alias typeof(this) T;
        alias ArrayList!T TList;
        
        T[] pa;
        //auto pl = new TList(pa);  // NOW IT WORKS !
        void opCatAssign(T v) {
                pa ~= v;
        }       
Well I am a D noob. Have to investigate a bit more, and of course any help is welcome :)

Bjoern

Reply via email to