digitalmars.D.learn - dcollections ArrayList pb with mixin template
- BLS (33/33) Jul 01 2010 Hi, I have a problem with a mixin template. More exact with an
- Steven Schveighoffer (8/41) Jul 01 2010 I'm thinking it has to do with you trying to create a member with that
- BLS (20/63) Jul 01 2010 Thanks for the feedback Steve.
- bearophile (4/6) Jul 01 2010 There are the static constructors too, for modules, structs, classes.
- BLS (4/10) Jul 01 2010 Hi bearophile,
- bearophile (4/5) Jul 01 2010 I have not shown you code because I don't understand your context. But y...
- BLS (20/25) Jul 02 2010 Indeed, the sample snippet was bad 'cause I don't use static.
- Steven Schveighoffer (4/9) Jul 02 2010 static constructors don't help initialize member variables.
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
Jul 01 2010
On Thu, 01 Jul 2010 15:36:53 -0400, BLS <windevguy 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 BjoernI'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
Jul 01 2010
On 01/07/2010 22:59, Steven Schveighoffer wrote:On Thu, 01 Jul 2010 15:36:53 -0400, BLS <windevguy hotmail.de> wrote: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 :) BjoernHi, 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 BjoernI'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
Jul 01 2010
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
Jul 01 2010
On 02/07/2010 00:26, bearophile wrote:Steven Schveighoffer:Hi bearophile, I don't understand (in this context) . Can you please elaborate a bit more ? thanks bjoernI 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
Jul 01 2010
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
Jul 01 2010
On 02/07/2010 00:47, bearophile wrote:BLS:Indeed, the sample snippet was bad 'cause I don't use static. mixin template TLinkList() { alias typeof(this) T; //alias LinkList!T TList; STATIC T[] pa; //static TList list; //= new TList(pa); // This does not work ! void opCatAssign(T v) { pa ~= v; } ... } // every struct respective class like class x { // enhanced with mixin TlinkList } can be used like every other linked list. (stack, queue, whatever) well, at least this is my intention. bjoernI 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
Jul 02 2010
On Thu, 01 Jul 2010 18:26:06 -0400, bearophile <bearophileHUGS lycos.com> wrote:Steven Schveighoffer:static constructors don't help initialize member variables. -SteveI 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.
Jul 02 2010