2012-03-06 19 views
1

私のプログラムにはさまざまなC++の構造体がありますが、この構造体の1つを入力に受け入れ、入力配列の各フィールドの大きさをバイト単位で取得する関数が必要です。誰でも私を助ける?C++の構造体のフィールドのサイズ

+0

構造体、またはあなたはそれらに立ち往生していますか? –

答えて

3

これはできません。 C++にはreflectionがありません。


1.正確には、言語によって自動的に行わ持ってすることはできません。もちろん、@ Nimの提案のように、手動でこれを追跡することもできます。ここ

1

アプローチである:オーバーロードされた関数を使用し

、及び(各struct用)各オーバーロードで、明示的配列で渡さにそのstructから各フィールドのサイズを挿入する(vector<size_t>は、より良い代替手段であります)。

これは、各オーバーロードの各構造内のフィールドを効果的にハードコーディングする必要があることを意味します。

また、いくつかのマクロを使用してboost :: fusionを使用しても構わない場合は、構造体を宣言することができます。私はどこかの例で答えを掲示し、それを掘り下げます...

ここにあります:Boost MPL to generate code for object serialization?は、構造を "昇進させて"メンバーを反復する方法を示しています。その場合、それはシリアライゼーション用ですが、各フィールドのサイズを返すようにそれを適合させるのは簡単です。コンパイル時にMPLでこれを行うことができ、各フィールドのサイズでMPLシーケンスを生成することができますが、少し難解です。実際に達成したいものによって異なります...