dcollections ArrayList pb with mixin template

BLS windevguy at hotmail.de
Thu Jul 1 15:18:10 PDT 2010


On 01/07/2010 22:59, Steven Schveighoffer wrote:
> On Thu, 01 Jul 2010 15:36:53 -0400, BLS <windevguy at 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


More information about the Digitalmars-d-learn mailing list