2016-08-10 4 views
0

と仮定私が持っているクラスTと配列を持っています。注意すべきストア整列されたデータは、非整列

uint8_t array[sizeof(T)]; 

ことの一つはarrayTとの互換性がない可能性がありますアライメントを持っているかもしれないということです。

ここで、Tを配列に格納する方法はありますか(アラインメントの問題があるにしても)、Tで何もしようとしない限り、配列から適切にコピーするまで揃えられたストレージスペース?

つまり、Tにアクセスする必要があるまで、arrayが格納場所になります。この場合、適切な位置合わせにコピーして値を使用して、再びストレージにコピーします。

注:

Tは自明コピー可能かもしれないが、自明コピー可能になるだろうT ......それはあなたがそう

と考えることができ、任意のクラスかもしれないことを保証するものではありません。.. ...これは何らかの形で可能ですか?(うまくいけば標準に準拠していますか?)

+1

'memcpy'、' T'が簡単なのか? –

+1

必要なものはシリアル化です。そこにはたくさんの答えがあります。 –

答えて

1

質問は進化しており、私はこれに対応してこれを改訂して追跡するつもりはありません。

はい、自明コピー可能オブジェクトのためにあなたがmemcpyを使用することができ、そしてそれは、標準で(非規範的)の例で使用しています。

C++ 11§3.9/ 2:オブジェクトが有効な値を保持しているか否か自明にコピー可能型Tの任意のオブジェクト(基底クラスのサブオブジェクト以外)について

Tと入力すると、オブジェクトを構成する基になるバイト(1.7)をcharまたはunsigned charの配列にコピーできます。 charまたはunsigned charの配列の内容がオブジェクトにコピーバックされた場合、オブジェクトは元の値を保持します。

テンプレートコードでは、あるタイプが普通にstd::is_trivially_copyableでコピー可能かどうかを確認できます。

+0

残念ながら、これは簡単にコピーすることはできません。私は質問を編集して少し明確にします。 – DarthRubik

+3

@DarthRubik:既存の回答が無効になるように質問を修正するのではなく、新しい質問をしてください。 –

+0

配置 'new'と移動コンストラクタおそらく? –

関連する問題