4.2 構造体メンバのサイズを返す。
まずは素直に作った関数テンプレートからです。
template<class T, class C>
std::size_t member_size_of(T (C::*pm))
{
return sizeof(T);
}
インライン展開されれば定数値になると思いますが、残念なことに文法上は定数式ではありませんので、定数式が要求される文脈では使用することができません。そこで、
template<class T, class C> T member_type_of(T (C::*pm));
のように、メンバの型と同じ型の返却値を持つ関数テンプレートを宣言し(関数原型だけでかまいません。関数本体の定義は不要です。)、
sizeof member_type_of(&A::a)
のような使い方をしてやれば、定数式としてメンバのサイズを取得することができます。このように、C++では、本体の定義がない関数原型だけの関数であっても利用価値があります。
元ネタ
ブックナビゲーション
- 技術情報
- Boost C++ Libraries メモ
- C++と組込み環境
- C++サンプル集
- C++テンプレート集
- C++プログラマのためのC言語入門
- C/C++迷信集
- C99関数・マクロ・前処理スクリプト集
- C言語再入門
- C言語徹底入門
- Drupal メモ
- TOPPERS 情報
- ベターCとしてのC++
- マイコン メモ
- ライブラリ開発入門
- 分割コンパイルをきわめる
- 擬似プロセッサを作る
- 象の卵を探して...
- 車輪の再発明
- 過去の情報

