how to access struct member using [] operator?

Basile B. via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Sep 25 09:07:59 PDT 2016


On Sunday, 25 September 2016 at 09:01:44 UTC, Namespace wrote:
> On Sunday, 25 September 2016 at 04:54:31 UTC, grampus wrote:
>> Dear all
>>
>> For example, I have a struct
>> struct point{int x;int y}
>> point a;
>>
>> Is there an easy way to access x and y by using a["x"] and 
>> a["y"]
>>
>> I guess I need to overload [], but can't figure out how.
>>
>> Someone can help? Thank you very much
>
> ----
> import std.stdio;
>
> struct Something
> {
>     int x, y;
>     float z;
>
>     auto opIndex()(string member) {
> 		switch (member) {
> 			case "x": return this.x;
> 			case "y": return this.y;
> 			case "z": return this.z;
> 			default: assert(0);
> 		}
>     }
> }
>
> void main(string[] args)
> {
>     Something s;
>     writeln(s["x"]);
>     writeln(s["z"]);
> }
> ----

WooW I have to say that I'm mesmerized !

How can this works ? "member" is run time variable so the return 
type shouldn't be inferable.


More information about the Digitalmars-d-learn mailing list