2011-09-21 3 views
5

컴파일 타임에 구조체 또는 클래스 내부의 이름과 유형을 어떻게 열거합니까? 어떻게하면 D에서 컴파일 타임에 구조체 또는 클래스 내부의 이름과 유형을 열거 할 수 있습니까?

, 즉

하여 다음을 수행 할 수

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_ 시간이 열거가 필요하십니까? 코드에서 나는 Reflection이 당신이 필요로하는 것을 할 수 있다는 것을 알기 때문에. –

+0

@Iaroslav는 D에서 반사가 사용되는 방법의 예를 가르쳐 주시겠습니까? – 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

관련 문제