【问题标题】:How to detect if a function is annotated with @property如何检测函数是否使用 @property 注释
【发布时间】:2013-06-24 02:16:16
【问题描述】:

是否可以使用 D 的内置特征和/或 std.traits 来检测函数(在类/结构中或没有)是否用 @property 注释?我知道@property 真的不是一个属性,但我认为__traits(getAttributes, ...) 可能会这样做(没有这样的运气)。

【问题讨论】:

  • 为什么需要它?如有疑问 - 使用括号!
  • 你甚至可以在不带括号的情况下调用没有@property 的函数,所以我认为没有实际需要。
  • 我正在尝试编写一个模板函数,为任意类生成一个“构建器”类。在我的项目中,我一直将@property 严格用作setter/getter,因此我的想法是从使用property 属性注释的类中获取所有函数,然后生成构建器方法。
  • 在这种情况下 std.traits.functionAttributes 不起作用吗?

标签: d phobos


【解决方案1】:

一般来说,我认为最好只测试您要使用的表达式是否编译(例如is(typeof(var.prop))),但如果出于某种原因您确实需要知道一个函数标记为@987654323 @,那么您可以使用std.traits.functionAttributes 来获取该信息。类似的东西

enum isProperty = (functionAttributes!(MyType.prop) & FunctionAttribute.property) != 0;

应该可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多