UDPソケットを使用してC++ネットワークアプリケーションを作成しているとします。私たちは、データのそれほど小さなパックを渡すために必要なので、私たちはバイトオーダーがネットワーク1で確認しながら、このような構造を使用:フレキシブルなアレイメンバーを持つパック構造の移植可能な代替手段
struct [[gnu::packed]] datagram {
uint64_t timestamp;
uint8_t type;
uint32_t temperatures[60]; // whatever, just an example
uint8_t raw_data[];
};
我々はGNU GCCを使用していたので、私たちは利用しましたこれは建築家かもしれとして、我々は、間にパディングをしたくないので、私たちは、パックされた構造を必要とし、このような
- 柔軟な配列メンバー
- 充填構造
などの非標準のC++の機能私たちのネットワークプログラムは異なるアーキテクチャ上で動作するかもしれません。
そして、1年後に、GCC以外のコンパイラをサポートする必要が出てくるかもしれませんが、それはそれらをサポートしていません。
これは標準のC++で可能ですか?
もちろん、uint8_t buffer[SOME_SIZE]
とmemcpyをデータグラムのすべての部分で使うことができますが、恐ろしい、本当に醜いコードを作成するための素晴らしい方法のように思えます。
シリアル化ライブラリを検索して使用します。この問題は何度も解決されていますが、解決策のどれも良いものではないので何度も何度もやり直しています。 – nwp