2010-11-25 4 views
2

C Structs와 C# 클래스 모두에 대한 답을 찾았지만 C++과 관련하여 빈손으로 돌아 왔습니다. 편집 : C에서는 할 수 없습니다. C#에서는 GetProperties() 메서드입니다.C++ 클래스의 (공용) 속성을 루프 할 수 있습니까?

컨텍스트 : 공공 속성이있는 C++ 클래스가 있습니다 (X, Y, Z가있는 Point라고 가정 해 봅시다). 이 속성들을 UDP를 통해 자바 클라이언트에 보내고 싶습니다. 내 생각은 세 가지 특성을 가진 바이트 (char *) 버퍼를 생성하는 것이었다. (나는 엔디안 문제를 처리했다.)

prepareForUdp(char * buffer) 
{ 
    int offset = 0; 
    int offsetValue = 4; 
    char tempBuffer[16]; 

    memcpy(tempBuffer, &X_, sizeof(X_)); 
    offset = offset + offsetValue; 
    memcpy(tempBuffer + offset, &Y_, sizeof(Y_)); 
    offset = offset + offsetValue; 
    memcpy(tempBuffer + offset, &Z_, sizeof(Z_)); 
    offset = offset + offsetValue; 

    memcpy(buffer, tempBuffer, sizeof(buffer)); 
} 

나는 점은, 다섯, 또는 n 번째 차원을 네 번째를 얻을 수 있기 때문에 내 인터페이스는, 진화 적으로 원하고, 내 prepareForUdp() 메소드는 (상대적으로) 일반 싶어요.

제 질문은 : 어떻게 내 속성을 통해 반복 (또는 반복)합니까?

+1

C의 방법은 무엇입니까? – lijie

+1

아마도 C 구조체에 대한 '응답'을 게시 한 경우 대답으로 간주 할 수 있습니다. 어떻게 C에서 그것을 해결할 수 있고 C++에서도 같은 것을 할 수 없다는 것을 알 수는 없다. – Jamie

+0

나는 그 점에 대해 미안하다, Jamie. C에 대한 대답은 "너는 할 수 없어"... 나는 첫 번째 게시물을 편집 할 것이다. –

답변

5

C++에는 리플렉션이 없습니다. 대답은 다음과 같습니다.

+0

해결 방법이 있습니까? –

+1

@ 아이작 (Iaaac) : 당신이하고 싶은 일을 정확히 위해서, 아니야, 그렇지 않아. 클래스의 개별 멤버를 통해 어떤 방식 으로든 반복 할 수는 없습니다. 바이트를 반복 할 수 있습니다. –

+0

그게 전부입니다! 그 일을하기 위해 기사 나 튜토리얼을 가르쳐 주시겠습니까? –

2

여기에 article on reflection이 있으며 어떻게 처리하지 않는지는 ++입니다.

+0

감사합니다, 그것은 유익했습니다! –

+0

이것은 이론적으로 질문에 대답 할 수 있지만 여기에 대답의 핵심 부분을 포함하고 참조 용 링크를 제공하는 것이 바람직합니다 (// meta.stackoverflow.com/q/8259). – Mgetz

관련 문제