Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
May 16, 2012 Standard struct constructors for the heap? | ||||
---|---|---|---|---|
| ||||
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 Re: Standard struct constructors for the heap? | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | > 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 17, 2012 Re: Standard struct constructors for the heap? | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | > 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 17, 2012 Re: Standard struct constructors for the heap? | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On 5/17/12, bearophile <bearophileHUGS@lycos.com> wrote:
> snip
Mixin 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 17, 2012 Re: Standard struct constructors for the heap? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrej Mitrovic | 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 Re: Standard struct constructors for the heap? | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | 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=4086
Should 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
|
Copyright © 1999-2021 by the D Language Foundation