実用上は元ネタのマクロで十分なのですが、この企画はあくまでも「C++関数・テンプレート集」ですので、ちょっと強引ながらもメタ関数と関数を作ってみることにします。

まずはメタ関数からです。

メタ関数を2つ定義してみました。前者はオフセット値Offsetが境界調整の要求サイズAlignmentの倍数になるように切り上げた値を返します。後者はオフセット値Offsetを型Tの境界調整要求サイズの倍数になるように切り上げます。

後者のalign_typeメタ関数ではalignofを使っていますが、C++03までを使う場合は前回の記事を参考に別の方法を使うようにしてください。

次に関数を作ってみます。今回は最初からconstexprを付けて定義してみることにしました。

constexprを付けずに単なるインライン関数にすればC++03まででも使えますが、それなら元ネタのマクロでも十分だと思います。


元ネタ

↑ 5. 一般のデータ型に関するテンプレート