2011-09-21 20 views
5

Derleme zamanında bir struct veya class içindeki isimleri ve türleri nasıl sıralarsınız? D'deki derleme zamanında bir struct veya class içindeki isimleri ve türleri nasıl sıralarsınız?

yani

aşağıdakileri yapmak için:

struct Foo { 
    int x; 
    int y; 
} 

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

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

Teşekkür,

Chris. Bunun gibi

+0

gerçekten _compile_ sürede bu numaralandırma gerekiyor mu? Çünkü koddan, Yansıma'nın ihtiyacınız olanı yapabildiğini görüyorum. –

+0

@Iaroslav, yansımanın D'de nasıl kullanılabileceğine dair bir örnek gösterebilir misiniz? – fadedbee

+0

Evet, derleme zamanında serileştirme işlevlerini oluşturmak daha verimli (çalışma zamanı) olacaktır. – fadedbee

cevap

8

:

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); 
} 

Pratik örnek: https://github.com/CyberShadow/ae/blob/master/utils/json.d#L107

+0

Bağlantınız, aradığım şey oldukça fazla, teşekkürler. – fadedbee