2011-09-21 16 views
5

संकलन समय पर संरचना या कक्षा के अंदर आप नामों और प्रकारों की गणना कैसे करते हैं?डी में संकलन समय पर संरचना या कक्षा के अंदर आप नामों और प्रकारों की गणना कैसे करते हैं?

अर्थात निम्न कार्य करें:

struct Foo { 
    int x; 
    int y; 
} 

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

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

धन्यवाद,

क्रिस।

+0

तुम सच में _compile_ समय में इस गणना की ज़रूरत है? क्योंकि कोड से मैं देखता हूं कि प्रतिबिंब आपको जो चाहिए वह कर सकता है। –

+0

@ इरोस्लाव क्या आप मुझे उदाहरण दे सकते हैं कि डी में प्रतिबिंब का उपयोग कैसे किया जा सकता है? – fadedbee

+0

हां, संकलन समय पर क्रमबद्धता कार्यों को उत्पन्न करने के लिए यह अधिक (रनटाइम) कुशल होगा। – fadedbee

उत्तर

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

व्यावहारिक उदाहरण: https://github.com/CyberShadow/ae/blob/master/utils/json.d#L107

+0

आपका लिंक वह है जो मैं खोज रहा था, धन्यवाद। – fadedbee