2012-03-06 77 views
1

的領域我在我的節目不同的C++結構,我想一個函數來接受這個結構在輸入之一,並讓我在一個int數組包含字節輸入結構的每個領域的大小。有人幫我嗎?尺寸的C++結構

+0

可以修改/替換結構,還是你堅持與他們? – 2012-03-06 11:08:33

回答

3

這是不可能的。 C++沒有reflection


1.準確地說,這是不可能有這種由語言自動完成。當然,你可以手動跟蹤這些東西(如@Nim的建議)。

1

下面是一個方法:

使用一個重載的函數,並且在每個過載(對於每個struct),明確地插入每場的從struct大小成在數組傳遞(vector<size_t>是更好的選擇)。

這意味着有效,你必須硬編碼在每個超載每個結構的字段。

另外,如果你是快樂的使用boost ::融合,有一些宏,你應該能夠推動結構 - 然後你就可以遍歷。我已經在SO的某個地方發佈了一個答案,將它挖掘出來...

這裏是:Boost MPL to generate code for object serialization?,顯示如何「促進」結構,然後遍歷成員。在那種情況下,它是用於序列化的,但它適應它來返回每個字段的大小是微不足道的。你可以在編譯時使用MPL做到這一點,並生成每個字段的大小MPL序列 - 但是這一點更靠譜 - 這一切都取決於你想要達到什麼真的...