April 04, 2018 Taming templates and mixin magic: type inpector helper in D/Phobos? | ||||
---|---|---|---|---|
| ||||
As a newbie in D (and making a lots of mistakes), I've found myself relying heavily in the use of a rudimentary type inspector to visualize my templated code instantiations. It's simple and incomplete as hell but good enough to see what happens under the hood quickly. QUESTION: Is there a function like that already in D? //real-life example goodEnoughTypeInspector!Human; goodEnoughTypeInspector!(Database!Human); //compile-time output Inspecting type: Human - public string name - public string address - public bool active Inspecting type: Database!(Human) - private string[] name - private string[] address - private bool[] active - public pure nothrow @nogc @safe ulong() count - public void insert |
April 04, 2018 Re: Taming templates and mixin magic: type inpector helper in D/Phobos? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Carlos Navarro | On Wednesday, 4 April 2018 at 05:28:57 UTC, Carlos Navarro wrote: > As a newbie in D (and making a lots of mistakes), I've found myself relying heavily in the use of a rudimentary type inspector to visualize my templated code instantiations. > It's simple and incomplete as hell but good enough to see what happens under the hood quickly. > > QUESTION: Is there a function like that already in D? > > > //real-life example > goodEnoughTypeInspector!Human; > goodEnoughTypeInspector!(Database!Human); > > //compile-time output > Inspecting type: Human > - public string name > - public string address > - public bool active > > Inspecting type: Database!(Human) > - private string[] name > - private string[] address > - private bool[] active > - public pure nothrow @nogc @safe ulong() count > - public void insert you might want to check std.traits [0] and __traits [1]. They both contain functions that may be useful. To get members you could use __traits(allMembers, MyTemplate!SomeType); Just check through the docs for relevant functions. You can then compose the relevant function. I wrote a basic version you can play with [2]. [0]: https://dlang.org/phobos/std_traits.html [1]: https://dlang.org/spec/traits.html [2]: https://run.dlang.io/is/COZ89T |
Copyright © 1999-2021 by the D Language Foundation