4.5 動的構造体のメンバのアドレスを返す。 公開日:2021年8月12日 C++関数・テンプレート集プログラミング技術情報 以前は元ネタの意図がよくわからなかったのですが、今回は頑張って挑戦してみたいと思います。 おそらくは単なる配列の中身を、実行時にレイアウトして構造体のように使おうということではないかと考えました。それであれば元ネタのマク […] 続きを読む
4.4 構造体メンバのアドレスから構造体のベースアドレスを逆算する。 公開日:2021年8月12日 C++関数・テンプレート集プログラミング技術情報 次のテンプレートは、メンバを直接指すポインタptrと、そのメンバへのポインタ型であるpmを与えたとき、構造体へのベースアドレスを返します。 [crayon-676e27d0ec00a421590180/] 上記のコードに […] 続きを読む
4.3 構造体の配列メンバの要素数を返す。 更新日:2021年8月12日 公開日:2021年8月11日 C++関数・テンプレート集プログラミング技術情報 次の関数テンプレートは、指定したメンバへのポインタが配列型のメンバのものである場合、その要素数を返します。 [crayon-676e27d0ec101848089972/] C++11以降であればconstexprを付け […] 続きを読む
4.2 構造体メンバのサイズを返す。 更新日:2021年8月12日 公開日:2021年8月10日 C++関数・テンプレート集プログラミング技術情報 これはマクロを作るのが一番簡単かもしれません。 元ネタでは、 [crayon-676e27d0ec1fd813266642/] のようになっていましたが、C++では [crayon-676e27d0ec1ff491795 […] 続きを読む
4.1 構造体メンバのオフセットを返す。 更新日:2021年8月12日 公開日:2021年8月9日 C++関数・テンプレート集プログラミング技術情報 これは、テンプレートではありませんが、offsetofマクロを用いるのが定石です。offsetofマクロは<cstddef>ヘッダで定義されますので、(組み込み用などの)自立処理系であっても、必ず提供されるこ […] 続きを読む
4. 構造体に関するテンプレート 更新日:2021年8月12日 公開日:2021年8月7日 C++関数・テンプレート集プログラミング技術情報 元ネタ C言語では、構造体のメンバや型などの情報を取得することができません。C++でも基本的にはそうなのですが、もし、構造体のメンバや型などの情報を取得する必要がある場合、あるいはメンバを連番で管理する必要がある場合には […] 続きを読む
3.4 配列の最後の要素のアドレスを取得する。 公開日:2021年8月7日 C++関数・テンプレート集プログラミング技術情報 前回は最終要素のひとつ先のアドレスを取得しました。今回は配列の最終要素のアドレスを取得してみます。 この場合も、元ネタにあるようなマクロを使えば求めることができます。 [crayon-676e27d0ec3f394147 […] 続きを読む
3.3 配列の終端アドレスを取得する。 公開日:2021年8月7日 C++関数・テンプレート集プログラミング技術情報 ポインタを使って配列の要素を指すことはよくあります。ところが配列の範囲外であっても、ひとつだけ有効なアドレスが存在します。それが配列の最終要素のひとつ先を指すアドレスです。 C++プログラマーであれば、そういう最小要素の […] 続きを読む
3.2 配列を動的に確保する。 公開日:2021年8月6日 C++関数・テンプレート集プログラミング技術情報 C++は便利なもので、new演算を使用すれば、配列を動的に割り付けることが簡単にできます。ただし、どうしても細かいメモリ管理を自分で行わないといけない状況でなければ、スマートポインタを使うのが普通です。 C++03までで […] 続きを読む
3.1 配列の要素数を返す。 公開日:2021年8月4日 C++関数・テンプレート集プログラミング技術情報 配列の要素数を知りたいことはよくあります。残念ながらsizeof演算子では配列全体のバイト数しか取得できませんので、要素数を知るには、配列全体のバイト数を1要素のバイト数で割る必要があります。 Cでは、元ネタにある次のよ […] 続きを読む