www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Function signature as string

reply John Chapman <johnch_atms hotmail.com> writes:
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
   }
Nov 29 2018
parent reply Neia Neutuladh <neia ikeran.org> writes:
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)
Nov 29 2018
parent John Chapman <johnch_atms hotmail.com> writes:
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.
Nov 29 2018