5.3 アラインメント調整のため、オフセットを切り上げる。 公開日:2021年8月16日 C++関数・テンプレート集プログラミング技術情報 実用上は元ネタのマクロで十分なのですが、この企画はあくまでも「C++関数・テンプレート集」ですので、ちょっと強引ながらもメタ関数と関数を作ってみることにします。 まずはメタ関数からです。 [crayon-673fdb7e […] 続きを読む
5.2 型のアラインメントを返す。 公開日:2021年8月16日 C++関数・テンプレート集プログラミング技術情報 境界調整(アラインメント)の要求サイズが必要になることがときどきあります。組込み開発ではとくに必要になることが多いのではないでしょうか? C++11以降であれば、そのものずばりの機能であるalignof演算子が使えます。 […] 続きを読む
5.1 型のビット数を返す。 公開日:2021年8月14日 C++関数・テンプレート集プログラミング技術情報 型のビット数には大きく分けて2種類があります。ひとつは記憶域全体のビット数で、もうひとつは記憶域のうち符号ビットも含めて値を表現するためのビット数です。なお、ここでいう型とはスカラ型(整数型・浮動小数点型・ポインタ型)を […] 続きを読む
5. 一般のデータ型に関するテンプレート 更新日:2021年8月16日 公開日:2021年8月13日 C++関数・テンプレート集プログラミング技術情報 元ネタ 5.1 型のビット数を返す。 5.2 型のアラインメントを返す。 5.3 アラインメント調整のため、オフセットを切り上げる。 ↑ C++関数・テンプレート集 続きを読む
4.5 動的構造体のメンバのアドレスを返す。 公開日:2021年8月12日 C++関数・テンプレート集プログラミング技術情報 以前は元ネタの意図がよくわからなかったのですが、今回は頑張って挑戦してみたいと思います。 おそらくは単なる配列の中身を、実行時にレイアウトして構造体のように使おうということではないかと考えました。それであれば元ネタのマク […] 続きを読む
4.4 構造体メンバのアドレスから構造体のベースアドレスを逆算する。 公開日:2021年8月12日 C++関数・テンプレート集プログラミング技術情報 次のテンプレートは、メンバを直接指すポインタptrと、そのメンバへのポインタ型であるpmを与えたとき、構造体へのベースアドレスを返します。 [crayon-673fdb7edd156401663131/] 上記のコードに […] 続きを読む
4.3 構造体の配列メンバの要素数を返す。 更新日:2021年8月12日 公開日:2021年8月11日 C++関数・テンプレート集プログラミング技術情報 次の関数テンプレートは、指定したメンバへのポインタが配列型のメンバのものである場合、その要素数を返します。 [crayon-673fdb7edd246589043833/] C++11以降であればconstexprを付け […] 続きを読む
4.2 構造体メンバのサイズを返す。 更新日:2021年8月12日 公開日:2021年8月10日 C++関数・テンプレート集プログラミング技術情報 これはマクロを作るのが一番簡単かもしれません。 元ネタでは、 [crayon-673fdb7edd36a603101635/] のようになっていましたが、C++では [crayon-673fdb7edd36c127211 […] 続きを読む
4.1 構造体メンバのオフセットを返す。 更新日:2021年8月12日 公開日:2021年8月9日 C++関数・テンプレート集プログラミング技術情報 これは、テンプレートではありませんが、offsetofマクロを用いるのが定石です。offsetofマクロは<cstddef>ヘッダで定義されますので、(組み込み用などの)自立処理系であっても、必ず提供されるこ […] 続きを読む
4. 構造体に関するテンプレート 更新日:2021年8月12日 公開日:2021年8月7日 C++関数・テンプレート集プログラミング技術情報 元ネタ C言語では、構造体のメンバや型などの情報を取得することができません。C++でも基本的にはそうなのですが、もし、構造体のメンバや型などの情報を取得する必要がある場合、あるいはメンバを連番で管理する必要がある場合には […] 続きを読む