D:函数参数名称内省

Joh*_*ohn 6 d introspection

给定D中的函数声明,是否可以在编译时自省任何函数参数名称的字符串表示,以用于自动函数反射.例如

void foo(int a, double b, string c) { }
register_function!(foo)()
Run Code Online (Sandbox Code Playgroud)

register_function能否在编译时以与__traits(allMembers,someClass)类似的方式提取"a","b","c"?

BCS*_*BCS 3

我认为 stringof 的用途之一是给出名称。您可以通过一些工作来解析它们。OTOH stringof 定义不明确,所以这会有点脆弱。

  • @Jonathan:你必须将“stringof”应用于该类型。即,如果您定义 `void register_function(T)(T f) { auto a = T.stringof; }`,然后调用 `register_function(&foo);` 给出 `a == "void function(int a, double b, string c)"`。BCS 建议解析这个字符串(这确实有点脆弱)。 (2认同)