D - Suggestion: "anon" keyword prefix for no-type structs
- Russ Lewis (62/62) Sep 26 2002 I'd like to propose this syntax:
- Patrick Down (55/61) Sep 26 2002 I like this idea but I have a different application for it.
I'd like to propose this syntax: anon struct { <members> } <variable>; which would declare a new (unnamed) struct type and create a single variable instance of it. However, I also think that array syntax should be allowed: anon struct { <members> }[] <arrayVariable>; This should be 100% clear to the parser (no abiguities like the old C++ syntax), and allows me the syntax sugar. The only alternative I have is to define dummy names: struct _valid { <members> } _valid valid; But if you need different "valid" structs in different areas of your type tree, then you have to prefix everything, and it starts to get really ugly: struct _myType { struct _valid { bool a,b; } _valid valid; struct _a { struct _a_valid { <aMemberList> } _a_valid valid; <aMemberList> } _a a; struct _b { struct _b_valid { <bMemberList } _b_valid valid; <bMemberList> } _b b; } This is bad enough to write by hand...but my current project is attempting to generate code automatically, and it gets really ugly! Just look how much nicer it would be with the "anon" syntax: struct _myType { anon struct { bool a,b; } valid; anon struct { anon struct { <aMemberList> } valid; <aMemberList> } a; anon struct { anon struct { <bMemberList } valid; <bMemberList> } b; } Much nicer! -- The Villagers are Online! http://villagersonline.com .[ (the fox.(quick,brown)) jumped.over(the dog.lazy) ] .[ (a version.of(English).(precise.more)) is(possible) ] ?[ you want.to(help(develop(it))) ]
Sep 26 2002
Russ Lewis <spamhole-2001-07-16 deming-os.org> wrote in news:3D93147F.B9D2AFB1 deming-os.org:I'd like to propose this syntax: anon struct { <members> } <variable>;I like this idea but I have a different application for it. I'm finding it nice to define callback structures. Right now because of the bug I mentioned in the news group yesterday I have to declare the structs outside the scope of the function in which they are used. struct _CalcNodeMin { TreeNode min; void TestNode(TreeNode node) { if(min == null) min = node; else { if(min.Value() > node.Value()) min = node; } } } void DoTreeCalcs() { _CalcNodeMin cnm; tree.forEachNode(&cnm.TestNode); // Do stuff with min node } Hopefully after the bug is fixed I can move the struct into the function. But it would also be nice if I did not need to give it a name. void DoTreeCalcs() { anon struct { TreeNode min; void TestNode(TreeNode node) { if(min == null) min = node; else { if(min.Value() > node.Value()) min = node; } } } cnm; tree.forEachNode(&cnm.TestNode); // Do stuff with min node }
Sep 26 2002