d - 如何列出D中类的模板方法?

标签 d

__traits(allMembers, Clazz) 返回所有类 Clazz 成员。我可以找到使用“MemberFunctionsTuple”函数的所有方法。但我怎样才能只获取模板方法呢?

最佳答案

看起来(通过非常粗略的测试),typeof(T.mem​​ber) 将为模板返回 void ,为字段或非模板返回非 void函数(返回 void 的常规函数​​将是 void(),而不是 void)。利用这一点:

import std.traits, std.meta;

class C {
  enum e = 5;         // compile-time value
  int field;          // plain field, not a template
  void fun() { }      // plain function, not a template
  void tfun()() { }   // templated function
  template temp() { } // template

  void both(int i) { }
  void both(T : string)(T i) { }
}

template allTemplateMembers(T) {
  enum isTemplateMember(string name) = is(typeof(mixin("T."~name)) == void);

  alias allTemplateMembers = Filter!(isTemplateMember, __traits(allMembers, T));
}

pragma(msg, allTemplateMembers!C); // tuple(tfun, temp)

请注意,both 不会通过,因为它同时具有模板化和非模板化重载。目前,如果您确实希望这样的成员通过,我不确定如何修改 allTemplateMembers

关于d - 如何列出D中类的模板方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33677716/

相关文章:

arrays - 在 D' 共享库和 Pascal (Lazarus) 主机之间发送/接收字符串和数组

c - D 绑定(bind)生成工具

d - std.algorithm.joiner(string[],string) - 为什么结果元素是 dchar 而不是 char?

reflection - D 有反射吗?

c - 附加到正在运行的进程的分析器?

c++ - 使用 -1 作为无符号 (size_t) 类型的标志值

c++ - Win32 向其他进程发送同步事件

d - D 中的 OpenGL 3/4 支持

function - 火卫一的纯度降低

templates - 难以理解 D 中的模板、模板混入、模板函数和作用域