D 检测可调用对象是否是静态的

D 检测可调用对象是否是静态的,d,D,我原以为我可以用std.traits.functionAttributes实现这一点,但它不支持静态。对于任何类型的可调用对象(包含opCall的结构),我如何判断该可调用对象是否用static注释?例如: template isStaticCallable(alias fun) if (isCallable!fun) { enum isStaticCallable = ...? } 是dlang的一部分,它提供对编译时信息的洞察。可用的特征之一是isStaticFunction用作\

我原以为我可以用std.traits.functionAttributes实现这一点,但它不支持
静态
。对于任何类型的可调用对象(包含opCall的结构),我如何判断该可调用对象是否用
static
注释?例如:

template isStaticCallable(alias fun) if (isCallable!fun)
{
    enum isStaticCallable = ...?
}
是dlang的一部分,它提供对编译时信息的洞察。可用的特征之一是
isStaticFunction
用作
\uu特征(isStaticFunction,fun)

示例代码:

import std.traits;

template isStaticCallable(alias fun) if (isCallable!fun)
{
    enum isStaticCallable = __traits(isStaticFunction, fun);
}


void main() {}

class Foo
{
    static void boo() {}
    void zoo() {}
}

pragma(msg, isStaticCallable!main); // note that this prints true because
                                    // the function has no context pointer
pragma(msg, isStaticCallable!(Foo.boo)); // prints true
pragma(msg, isStaticCallable!(Foo.zoo)); // prints false