digitalmars.D.learn - Get function argument name?
- JN (11/11) Mar 04 2018 Imagine a function like this:
- arturg (12/23) Mar 04 2018 you can pass it by alias:
- JN (3/14) Mar 04 2018 Well, it works. But I am confused now, why. Isn't alias only for
- bauss (3/21) Mar 04 2018 Because it is what it is, an alias. Not a type.
- Timothee Cour (7/32) Mar 04 2018 `printName(alias var)()` is not a great solution, eg: doesn't work
Imagine a function like this: void printValue(T)(string name, T value) { writeln(name, " = ", value); } int x = 10; printValue("x", x); is it somehow possible to convert that printValue into a mixin or something, so I could do something like: printValue(x); and it will figure out the "x" part automatically?
Mar 04 2018
On Sunday, 4 March 2018 at 21:03:04 UTC, JN wrote:Imagine a function like this: void printValue(T)(string name, T value) { writeln(name, " = ", value); } int x = 10; printValue("x", x); is it somehow possible to convert that printValue into a mixin or something, so I could do something like: printValue(x); and it will figure out the "x" part automatically?you can pass it by alias: import std.stdio; void main(string[] args) { int x; printName!(x); } void printName(alias var)() { writeln(__traits(identifier, var), " ", var); }
Mar 04 2018
On Sunday, 4 March 2018 at 21:12:44 UTC, arturg wrote:you can pass it by alias: import std.stdio; void main(string[] args) { int x; printName!(x); } void printName(alias var)() { writeln(__traits(identifier, var), " ", var); }Well, it works. But I am confused now, why. Isn't alias only for types (like a typedef)? Why can we use it for variable here?
Mar 04 2018
On Sunday, 4 March 2018 at 21:48:53 UTC, JN wrote:On Sunday, 4 March 2018 at 21:12:44 UTC, arturg wrote:Because it is what it is, an alias. Not a type. It can be a type, expression or member/variable.you can pass it by alias: import std.stdio; void main(string[] args) { int x; printName!(x); } void printName(alias var)() { writeln(__traits(identifier, var), " ", var); }Well, it works. But I am confused now, why. Isn't alias only for types (like a typedef)? Why can we use it for variable here?
Mar 04 2018
`printName(alias var)()` is not a great solution, eg: doesn't work with expressions, doesn't work with variadics, introduces template bloat. https://github.com/dlang/dmd/pull/7821 introduces __traits(getCallerSource, symbol) which will allow what you want. On Sun, Mar 4, 2018 at 1:53 PM, bauss via Digitalmars-d-learn <digitalmars-d-learn puremagic.com> wrote:On Sunday, 4 March 2018 at 21:48:53 UTC, JN wrote:On Sunday, 4 March 2018 at 21:12:44 UTC, arturg wrote:Because it is what it is, an alias. Not a type. It can be a type, expression or member/variable.you can pass it by alias: import std.stdio; void main(string[] args) { int x; printName!(x); } void printName(alias var)() { writeln(__traits(identifier, var), " ", var); }Well, it works. But I am confused now, why. Isn't alias only for types (like a typedef)? Why can we use it for variable here?
Mar 04 2018