Re: dcollections ArrayList pb with mixin template
On Thu, 01 Jul 2010 18:26:06 -0400, bearophile bearophileh...@lycos.com wrote: Steven Schveighoffer: I think a member initializer has to be a constant expression, like int i = 1. Anything else has to be done in the constructor. There are the static constructors too, for modules, structs, classes. static constructors don't help initialize member variables. -Steve
dcollections ArrayList pb with mixin template
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
Re: dcollections ArrayList pb with mixin template
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
Re: dcollections ArrayList pb with mixin template
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
Re: dcollections ArrayList pb with mixin template
Steven Schveighoffer: I think a member initializer has to be a constant expression, like int i = 1. Anything else has to be done in the constructor. There are the static constructors too, for modules, structs, classes. Bye, bearophile
Re: dcollections ArrayList pb with mixin template
On 02/07/2010 00:26, bearophile wrote: Steven Schveighoffer: I think a member initializer has to be a constant expression, like int i = 1. Anything else has to be done in the constructor. There are the static constructors too, for modules, structs, classes. Bye, bearophile Hi bearophile, I don't understand (in this context) . Can you please elaborate a bit more ? thanks bjoern
Re: dcollections ArrayList pb with mixin template
BLS: I don't understand (in this context) . Can you please elaborate a bit more ? I have not shown you code because I don't understand your context. But you can put inside static this() {...} code that can't be run statically, like the initialization of a run-time thing. Bye, bearophile