Anonymous structure

ZombineDev via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Apr 19 13:29:56 PDT 2016


On Tuesday, 19 April 2016 at 20:19:37 UTC, ZombineDev wrote:
> On Tuesday, 19 April 2016 at 20:18:07 UTC, ZombineDev wrote:
>> On Tuesday, 19 April 2016 at 17:16:00 UTC, Tofu Ninja wrote:
>>> On Tuesday, 19 April 2016 at 16:16:39 UTC, ZombineDev wrote:
>>>> On Monday, 18 April 2016 at 23:00:42 UTC, captaindet wrote:
>>>>> On 2016-04-18 14:12, Tofu Ninja wrote:
>>>>>> Also is there a way to have a named substructure, not a 
>>>>>> nested structure
>>>>>> but something to just add an additional name, maybe 
>>>>>> something like
>>>>>> struct a{
>>>>>>      struct{
>>>>>>          int x;
>>>>>>          int y;
>>>>>>          int z;
>>>>>>      } b;
>>>>>> }
>>>>>
>>>>> not sure what you mean by "named substructure, not a nested 
>>>>> structure" but this works:
>>>>>
>>>>> struct Outer{
>>>>> 	struct Inner{
>>>>> 		int x;
>>>>> 		int y;
>>>>> 		int z;
>>>>> 	}
>>>>> 	Inner inner;
>>>>> 	int a;
>>>>> }
>>>>>
>>>>> Outer outer;
>>>>> outer.a = 7;
>>>>> outer.inner.y = 42;
>>>>> //  outer.x = 13; //fails
>>>>>
>>>>> writeln(outer);
>>>>
>>>> There's another way:
>>>> http://forum.dlang.org/post/n3q9vn$1l8g$1@digitalmars.com
>>>
>>> How is that supposed to work here?
>>
>> struct A
>> {
>>     template _b()
>>     {
>>         int x, y, z;
>>     }	
>>     alias b = _b!();	
>> }
>>
>> void main()
>> {
>>     import std.stdio;
>> 	
>>     auto a = A();
>>     a.b.x = 5;
>>
>>     writeln(a.b.x); // prints 5
>>     //writeln(a.b); // Error: expression has no value
>> }
>
> Also functions defined in _b can access members of A.

And also:

import std.traits;
writeln(Fields!A.stringof);      // prints ()
writeln(Fields!Outer.stringof);  // prints (Inner, int)


More information about the Digitalmars-d-learn mailing list