まだ不明な型へのポインタを処理するテンプレート関数があるとしますT
。ここで、型T
がvoid*
64ビットプラットフォーム上にある場合は8バイトで整列する必要がありT
ますchar
が、1バイトで整列する必要がT
あり、クラスである場合は、その整列要件はメンバー変数によって異なります。
これはすべて紙で計算できますが、コンパイラに特定のタイプのアライメント要件を生成させるにはどうすればよいT
ですか?
コンパイル時に特定のタイプのアライメント要件を見つける方法はありますか?
C++11 では、 alignofとalignasを使用してアサートを作成し、アライメントの要件を提供できます。std::alignも参照して、実行時のアライメントを制御してください。
C++11 がない場合、次の 2 の累乗以上を使用するのが最も簡単sizeof(T)
です。また、最大のプリミティブの位置合わせに制限することもできます。8 は、64 ビット アーキテクチャではかなり安全な賭けです (ただし、SSE データ型などに注意する必要があるかもしれません)。