Thread overview | |||||
---|---|---|---|---|---|
|
November 29, 2018 Function signature as string | ||||
---|---|---|---|---|
| ||||
Is there any way to get a string representing a function's exact signature as declared in the source? I can generate it myself using reflection but it might not be 100% verbatim so wanted to know if there's anything built in? foreach (m; __traits(allMembers, T)) { alias member = __traits(getMember, T, m); string signature = // Call some function to get "member"'s signature as a string } |
November 29, 2018 Re: Function signature as string | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Chapman | On Thu, 29 Nov 2018 21:11:06 +0000, John Chapman wrote: > Is there any way to get a string representing a function's exact signature as declared in the source? I can generate it myself using reflection but it might not be 100% verbatim so wanted to know if there's anything built in? > > foreach (m; __traits(allMembers, T)) { > alias member = __traits(getMember, T, m); > string signature = // Call some function to get "member"'s > signature as a string > } typeof(&func).stringof should do it: void bar(string s, ref Foo!int i) {} void main() { writeln(typeof(&bar).stringof); } prints: void function(string s, ref Foo!int i) |
November 29, 2018 Re: Function signature as string | ||||
---|---|---|---|---|
| ||||
Posted in reply to Neia Neutuladh | On Thursday, 29 November 2018 at 21:31:57 UTC, Neia Neutuladh wrote:
> On Thu, 29 Nov 2018 21:11:06 +0000, John Chapman wrote:
>> Is there any way to get a string representing a function's exact signature as declared in the source? I can generate it myself using reflection but it might not be 100% verbatim so wanted to know if there's anything built in?
>>
>> foreach (m; __traits(allMembers, T)) {
>> alias member = __traits(getMember, T, m);
>> string signature = // Call some function to get "member"'s
>> signature as a string
>> }
>
> typeof(&func).stringof should do it:
>
> void bar(string s, ref Foo!int i) {}
> void main()
> {
> writeln(typeof(&bar).stringof);
> }
>
> prints: void function(string s, ref Foo!int i)
That does the trick - thanks.
|
Copyright © 1999-2021 by the D Language Foundation