私のプログラムにはさまざまなC++の構造体がありますが、この構造体の1つを入力に受け入れ、入力配列の各フィールドの大きさをバイト単位で取得する関数が必要です。誰でも私を助ける?C++の構造体のフィールドのサイズ
1
A
答えて
3
これはできません。 C++にはreflectionがありません。
1.正確には、言語によって自動的に行わ持ってすることはできません。もちろん、@ Nimの提案のように、手動でこれを追跡することもできます。ここ
1
アプローチである:オーバーロードされた関数を使用し
、及び(各struct
用)各オーバーロードで、明示的配列で渡さにそのstruct
から各フィールドのサイズを挿入する(vector<size_t>
は、より良い代替手段であります)。
これは、各オーバーロードの各構造内のフィールドを効果的にハードコーディングする必要があることを意味します。
また、いくつかのマクロを使用してboost :: fusionを使用しても構わない場合は、構造体を宣言することができます。私はどこかの例で答えを掲示し、それを掘り下げます...
ここにあります:Boost MPL to generate code for object serialization?は、構造を "昇進させて"メンバーを反復する方法を示しています。その場合、それはシリアライゼーション用ですが、各フィールドのサイズを返すようにそれを適合させるのは簡単です。コンパイル時にMPLでこれを行うことができ、各フィールドのサイズでMPLシーケンスを生成することができますが、少し難解です。実際に達成したいものによって異なります...
関連する問題
- 1. C - 構造体
- 2. C構造体
- 3. C/C++ - 構造体
構造体、またはあなたはそれらに立ち往生していますか? –