2012-03-06 1 views
1

내 프로그램에는 다양한 C++ 구조체가 있는데이 구조체 중 하나를 받아들이고 int 배열의 각 입력 필드 크기를 바이트 단위로 가져 오는 함수가 필요합니다. 어느 누구도 나를 도와주지?C++ 필드 구조체의 크기

+0

구조체, 또는 당신은 그들과 붙어 있습니까? –

답변

3

그건 불가능합니다. C++에는 reflection이 없습니다.


1.

은이 언어에 의해 자동으로 수행해야하는 것은 불가능, 정확합니다. 물론 수동으로 (@ Nim의 제안과 같이)이 물건들을 추적 할 수 있습니다. 여기

1

는 방식이다

오버로드 기능을 이용하고, (각 struct 대한) 각각 과부하 명시 배열 전달은 (vector<size_t> 나은 대안으로 그 struct에서 각 필드의 크기를 삽입).

이것은 각 오버로드에서 각 구조의 필드를 효과적으로 하드 코딩해야 함을 의미합니다.

또는 몇 가지 매크로를 사용하여 boost :: fusion을 사용하면 구조를 승격시킬 수 있습니다. 그러면 구조를 승격 할 수 있습니다. 나는 어딘가에 예제를 가지고 답을 올렸고 그것을 파헤쳐 볼 것입니다 ...

여기에 있습니다 : Boost MPL to generate code for object serialization?, 구조를 "홍보"하고 멤버를 반복하는 방법을 보여줍니다. 이 경우 직렬화에 사용되지만 각 필드의 크기를 반환하는 것은 쉽지 않습니다. 컴파일 할 때 MPL로 이것을 할 수 있고 각 필드의 크기로 MPL 시퀀스를 생성 할 수 있습니다. 그러나 조금 더 까다 롭습니다. 실제로 모든 것을 달성하기를 원하는지에 달려 있습니다 ...