2011-09-21 6 views
5

Come si enumerano i nomi e i tipi all'interno di una struct o di una classe in fase di compilazione?Come si enumerano i nomi e i tipi all'interno di una struct o di una classe in fase di compilazione in D?

cioè a effettuare le seguenti operazioni:

struct Foo { 
    int x; 
    int y; 
} 

string serialise!(A)(A a) { 
    ...magic... 
} 

auto f = Foo(1,2); 
serialise(f); -> "x:1, y:2" 

Grazie,

Chris.

+0

Avete veramente bisogno di questo censimento nel _compile_ tempo? Perché dal codice vedo che Reflection può fare ciò di cui hai bisogno. –

+0

@Iaroslav potresti indicarmi un esempio di come la riflessione può essere usata in D? – fadedbee

+0

Sì, sarebbe più (runtime) efficiente generare le funzioni di serializzazione in fase di compilazione. – fadedbee

risposta

8

Ti piace questa:

foreach (index, field; myStruct.tupleof) 
{ 
    // field.stringof is "field", slice is to cut off "myStruct." 
    pragma(msg, "Name: " ~ myStruct.tupleof[index].stringof[9..$]); 
    pragma(msg, "Type: " ~ typeof(field).stringof); 
} 

Esempio pratico: https://github.com/CyberShadow/ae/blob/master/utils/json.d#L107

+0

Il tuo link è praticamente quello che stavo cercando, grazie. – fadedbee

Problemi correlati