Buscar..


Sintaxis

  • __traits (TraitsKeyword, TraitsArguments ...)

Iterando sobre los miembros de una estructura.

import std.stdio;

struct A {
    int b;
    void c();
    string d;
};

void main() {
    // The following foreach is unrolled in compile time
    foreach(name; __traits(allMembers, A)) {
        pragma(msg, name);
    }
}

Los rasgos allMembers devuelven una tupla de cadena que contiene los nombres de los miembros del tipo dado. Estas cadenas son conocidas en tiempo de compilación.

Iterando sobre miembros de una estructura / clase sin sus miembros heredados

module main;

auto getMemberNames(T)() @safe pure {
    string[] members;
    
    foreach (derived; __traits(derivedMembers, T)) {
        members ~= derived;
    }
    
    return members;
}

class Foo {
    int a;
    int b;
}

class Bar : Foo {
    int c;
    int d;
    int e;
}

void main() {
    import std.stdio;
    
    foreach (member; getMemberNames!Bar) {
        writeln(member);
    }
}

DeriveMembers devuelve una tupla de literales de cadena, donde cada cadena es el nombre del miembro.

Las salidas de ejemplo:

c
d
e


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow