2016-05-16 7 views
0

コンパイル時にでのタイプT要素の配列としてタイプUの単一の変数を表現したいとします。 sizeof(T)はsizeof(U)を完全に分割するので、k = sizeof(U)/ sizeof(T)とすると、std::array<T, k>でなければなりません。sizeof(U)= k * sizeof(T)のUからstd :: array <T, k>をどのように構築すればよいですか?

問題は、私はそれをどのように(コンパイル時に)作りますか?キャストを使用することはできますか(つまり、

* (reinterpret_cast<std::array<T,k> *>(&my_u)) 

)、またはその要素を設定する再帰的な関数呼び出しを使用できますか?または、より良い/より良い方法がありますか?

std::array<T, k> my_t; 
static_assert(sizeof(my_t) == sizeof(my_u), "!!"); 
std::memcpy(my_t.data(), &my_u, sizeof(my_u)); 

はない「よりよい」方法はありません、あなたは厳しいエイリアシング制限を回避するためにいくつかの点でmemcpyを使用する必要がありますよう(場合を除き:

+1

なぜこれが欲しいですか? – GManNickG

+0

音はビットフィールドのように、またはおそらくユニオンのようなものです。 –

+0

できません。コンパイル時にreinterpret_castを実行することはできません。 – ecatmur

答えて

関連する問題