如何获取类型的所有非静态成员?

奔跑

__traits(allMembers, T)返回实例和静态成员。如何过滤出静态成员?我希望这适用于字段和方法。

绿化

当然可以。D的内省能力是巨大的,在您的情况下,“过滤自”std.meta是您的朋友;-)

struct Lion
{
    static maxSpeed = 100;
    string name;
    bool isDangerous()
    {
        return true;
    }
    static bool isAlive(uint meat)
    {
        return meat > 100;
    }
}

template FilterMembers(alias T, bool filterStatic = true)
{
    import std.meta : Filter;
    template filter(string member)
    {
        enum memberStr = T.stringof ~ "." ~ member;
        enum isStatic = __traits(isStaticFunction, mixin(memberStr)) ||
                        __traits(compiles, mixin("{auto b = " ~ memberStr ~ ";}"));
        enum filter = filterStatic ^ isStatic;
    }
    enum FilterMembers = Filter!(filter, __traits(allMembers, T));
}


unittest
{
    import std.meta : AliasSeq;
    assert(FilterMembers!Lion == AliasSeq!("name", "isDangerous"));
    assert(FilterMembers!(Lion, false) == AliasSeq!("maxSpeed", "isAlive"));
}

// or using the old-school main
version(unittest) {} else
void main()
{
    import std.stdio;
    foreach (member; FilterMembers!Lion)
        writeln(member);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在模板类型中强制执行静态成员初始化?或如何获取从模板类型派生的所有类的数量?

来自分类Dev

如何在编译时获取指向非静态数据成员的指针的对象类型?

来自分类Dev

静态内部类如何访问外部类的所有静态数据成员和静态成员函数?

来自分类Dev

如何获取非静态std :: array成员的constexpr`.size()`

来自分类Dev

如何获取所有非漫游器成员的列表,重写Discord.py?

来自分类Dev

如何获取所有类的tcmalloc静态

来自分类Dev

具有静态成员的非静态访问的Java 8类型推断

来自分类Dev

有什么方法可以获取某个类型的成员以及所有后续基本类型的成员?

来自分类Dev

如何获得没有实例的非静态方法的类型?

来自分类Dev

如何获取特定类型的所有部分

来自分类Dev

如何获取类型的所有方法

来自分类Dev

私有类型的静态常量成员

来自分类Dev

如何使用phpcs获取所有php成员变量

来自分类Dev

如何获取维度的所有当前选定成员的数量

来自分类Dev

如何在Swift中获取所有静态属性?

来自分类Dev

如何在Swift中获取所有静态属性?

来自分类Dev

非静态方法如何访问Java中的静态成员?

来自分类Dev

有没有办法从非静态方法获取参数类型?

来自分类Dev

静态类非静态成员

来自分类Dev

非静态类的静态成员?

来自分类Dev

非静态成员参考

来自分类Dev

如何初始化具有特征类型的类模板的静态数据成员?

来自分类Dev

如何初始化具有特征类型的类模板的静态数据成员?

来自分类Dev

获取指向非静态成员函数的函数指针

来自分类Dev

使用静态类型成员确保非静态类中的类型安全

来自分类Dev

什么时候非静态const数据成员比const静态成员更有用?

来自分类Dev

为什么非恒定静态成员具有多个定义?

来自分类Dev

获取列表的所有成员

来自分类Dev

C#静态类-静态类不能具有非静态成员

Related 相关文章

  1. 1

    如何在模板类型中强制执行静态成员初始化?或如何获取从模板类型派生的所有类的数量?

  2. 2

    如何在编译时获取指向非静态数据成员的指针的对象类型?

  3. 3

    静态内部类如何访问外部类的所有静态数据成员和静态成员函数?

  4. 4

    如何获取非静态std :: array成员的constexpr`.size()`

  5. 5

    如何获取所有非漫游器成员的列表,重写Discord.py?

  6. 6

    如何获取所有类的tcmalloc静态

  7. 7

    具有静态成员的非静态访问的Java 8类型推断

  8. 8

    有什么方法可以获取某个类型的成员以及所有后续基本类型的成员?

  9. 9

    如何获得没有实例的非静态方法的类型?

  10. 10

    如何获取特定类型的所有部分

  11. 11

    如何获取类型的所有方法

  12. 12

    私有类型的静态常量成员

  13. 13

    如何使用phpcs获取所有php成员变量

  14. 14

    如何获取维度的所有当前选定成员的数量

  15. 15

    如何在Swift中获取所有静态属性?

  16. 16

    如何在Swift中获取所有静态属性?

  17. 17

    非静态方法如何访问Java中的静态成员?

  18. 18

    有没有办法从非静态方法获取参数类型?

  19. 19

    静态类非静态成员

  20. 20

    非静态类的静态成员?

  21. 21

    非静态成员参考

  22. 22

    如何初始化具有特征类型的类模板的静态数据成员?

  23. 23

    如何初始化具有特征类型的类模板的静态数据成员?

  24. 24

    获取指向非静态成员函数的函数指针

  25. 25

    使用静态类型成员确保非静态类中的类型安全

  26. 26

    什么时候非静态const数据成员比const静态成员更有用?

  27. 27

    为什么非恒定静态成员具有多个定义?

  28. 28

    获取列表的所有成员

  29. 29

    C#静态类-静态类不能具有非静态成员

热门标签

归档