Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
February 13, 2013 Default initialization of struct | ||||
---|---|---|---|---|
| ||||
Hi all, I play with structs and UDAs today, and I found out some limitation: struct Entity { string name; } void main(string[] args) { Entity entity = {name : "Name"}; // static initialization by name auto entity2 = Entity(); // default initialization auto entity3 = {name : "Name"}; // should be nice to have auto entity4 = Entity(name : "Name"); // and this would be useful too. Eg.: for UDAs @Entity(name : "EntityName") } |
February 13, 2013 Re: Default initialization of struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to Daniel Kozak | On 2013-02-13 09:49, Daniel Kozak wrote: > Hi all, > > I play with structs and UDAs today, and I found out some limitation: > > struct Entity > { > string name; > } > > void main(string[] args) > { > Entity entity = {name : "Name"}; // static initialization by name > auto entity2 = Entity(); // default initialization > auto entity3 = {name : "Name"}; // should be nice to have How would this work. What if there's another struct in scope that has the same member(s)? > auto entity4 = Entity(name : "Name"); // and this would be useful > too. Eg.: for UDAs @Entity(name : "EntityName") > } > Check my proposal for anonymous structs: http://forum.dlang.org/thread/kfbnuc$1cro$1@digitalmars.com#post-kfbnuc:241cro:241:40digitalmars.com -- /Jacob Carlborg |
February 13, 2013 Re: Default initialization of struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to Daniel Kozak | On Wednesday, 13 February 2013 at 08:49:41 UTC, Daniel Kozak wrote:
> Hi all,
>
> I play with structs and UDAs today, and I found out some limitation:
>
> struct Entity
> {
> string name;
> }
>
> void main(string[] args)
> {
> Entity entity = {name : "Name"}; // static initialization by name
> auto entity2 = Entity(); // default initialization
> auto entity3 = {name : "Name"}; // should be nice to have
> auto entity4 = Entity(name : "Name"); // and this would be useful too. Eg.: for UDAs @Entity(name : "EntityName")
> }
entity3: What should the compiler do? Guess the type as long as it has a constructor with "name"?
entity4: You're talking about static opCall and named parameters. I'm pretty sure named parameters have been rejected as parameter names would be part of the public interface for functions.
|
February 13, 2013 Re: Default initialization of struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jacob Carlborg | On Wednesday, 13 February 2013 at 10:38:23 UTC, Jacob Carlborg wrote:
> On 2013-02-13 09:49, Daniel Kozak wrote:
>> Hi all,
>>
>> I play with structs and UDAs today, and I found out some limitation:
>>
>> struct Entity
>> {
>> string name;
>> }
>>
>> void main(string[] args)
>> {
>> Entity entity = {name : "Name"}; // static initialization by name
>> auto entity2 = Entity(); // default initialization
>> auto entity3 = {name : "Name"}; // should be nice to have
>
> How would this work. What if there's another struct in scope that has the same member(s)?
>
>> auto entity4 = Entity(name : "Name"); // and this would be useful
>> too. Eg.: for UDAs @Entity(name : "EntityName")
>> }
>>
>
> Check my proposal for anonymous structs:
>
> http://forum.dlang.org/thread/kfbnuc$1cro$1@digitalmars.com#post-kfbnuc:241cro:241:40digitalmars.com
my fault, entity3 should be anonymous struct not type of Entity, just like your proposal
|
February 13, 2013 Re: Default initialization of struct | ||||
---|---|---|---|---|
| ||||
Posted in reply to simendsjo | > entity4: You're talking about static opCall and named parameters. I'm pretty sure named parameters have been rejected as parameter names would be part of the public interface for functions.
No, I dont want named parameters, because I agree it is not good idea to have parameter names part of public interface. I speak about syntax sugar, how to do this:
module main;
import std.stdio;
struct Entity
{
string name;
}
static Entity entity = {name: "EntityName"};
@entity
class A {
}
void main(string[] args)
{
auto attributes = __traits(getAttributes, A);
writeln(attributes[0]);
}
by this code:
module main;
import std.stdio;
struct Entity
{
string name;
}
@Entity(name : "EntityName")
class A {
}
void main(string[] args)
{
auto attributes = __traits(getAttributes, A);
writeln(attributes[0]);
}
|
Copyright © 1999-2021 by the D Language Foundation