Thread overview
Function signature as string
Nov 29, 2018
John Chapman
Nov 29, 2018
Neia Neutuladh
Nov 29, 2018
John Chapman
November 29, 2018
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
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
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.