digitalmars.D - Standard struct constructors for the heap?
- bearophile (26/26) May 16 2012 Regarding the efforts of removing limitations from D, do you know
- bearophile (11/19) May 16 2012 Sorry, I meant:
- bearophile (9/17) May 16 2012 I am sleepy. Third try:
- Andrej Mitrovic (26/27) May 16 2012 Mixin workaround:
- bearophile (5/6) May 17 2012 Yeah, in some cases I have used a similar workaround. Now I'd
- Steven Schveighoffer (14/17) May 17 2012 Should be absolutely feasible.
Regarding the efforts of removing limitations from D, do you know if there are problems in implementing this oldish enhancement request? http://d.puremagic.com/issues/show_bug.cgi?id=4086 The idea is to just allow the heap creation of simple structs with no need to define a constructor: struct Node { int data; Node* next; } void main() { Node n1 = Node(10); // OK Node n2 = Node(10, null); // OK } I am writing many of those stupid struct initializations, it's boring busy work and they don't make the code more readable, just longer, so I'd like D to define them by itself: this(int data_=int.init, Node* next_=(Node*).init) pure nothrow safe { this.data = data_; this.next = next_; } Removing this limit also makes D more uniform with locally-allocated struct construction semantics. Bye, bearophile
May 16 2012
struct Node { int data; Node* next; } void main() { Node n1 = Node(10); // OK Node n2 = Node(10, null); // OK }Sorry, I meant: struct Node { int data; Node* next; } void main() { Node n1 = new Node(10); // OK Node n2 = new Node(10, null); // OK } Bye, bearophile
May 16 2012
struct Node { int data; Node* next; } void main() { Node n1 = new Node(10); // OK Node n2 = new Node(10, null); // OK }I am sleepy. Third try: struct Node { int data; Node* next; } void main() { Node* n1 = new Node(10); // OK Node* n2 = new Node(10, null); // OK }
May 16 2012
On 5/17/12, bearophile <bearophileHUGS lycos.com> wrote:snipMixin workaround: import std.conv; property string makeCtors(T)() { T t; string res; foreach (i; 0 .. typeof(t.tupleof).length) { res ~= "this(typeof(this.tupleof[0.." ~ to!string(i+1) ~ "]) tup) { this.tupleof[0.." ~ to!string(i+1) ~ "] = tup; }\n"; } return res; } struct Node { mixin(makeCtors!Node); int data; Node* next; } void main() { Node* n1 = new Node(10); // OK Node* n2 = new Node(10, null); // OK }
May 16 2012
Andrej Mitrovic:Mixin workaround:Yeah, in some cases I have used a similar workaround. Now I'd like to avoid the workaround. Bye, bearophile
May 17 2012
On Wed, 16 May 2012 19:50:25 -0400, bearophile <bearophileHUGS lycos.com> wrote:Regarding the efforts of removing limitations from D, do you know if there are problems in implementing this oldish enhancement request? http://d.puremagic.com/issues/show_bug.cgi?id=4086Should be absolutely feasible. I'd also like to see this work: struct X { int x; this(int x) {this.x = x;} } void main(){ X x; // no ctor needed X *xp = new X; // but this is an error! } -Steve
May 17 2012