D 如何检测函数是否用@property注释

D 如何检测函数是否用@property注释,d,phobos,D,Phobos,是否可以使用D的内置traits和/或std.traits来检测函数(在类/结构中或不在类/结构中)是否用@property注释?我知道@property并不是一个真正的属性,但我认为\u traits(getAttributes,…)可能会这样做(没有这样的运气)。一般来说,我认为最好只测试您想要使用的表达式是否是编译器(例如是(typeof(var.prop)),但是,如果出于某种原因,您确实需要知道某个函数被标记为@property,那么您可以使用来获取该信息。差不多 enum isPro

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

一般来说,我认为最好只测试您想要使用的表达式是否是编译器(例如
是(typeof(var.prop))
,但是,如果出于某种原因,您确实需要知道某个函数被标记为
@property
,那么您可以使用来获取该信息。差不多

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

应该可以工作。

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

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

应该有用。

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