配列サイズを決定するためのテンプレート関数
以下のテンプレート関数について考えてみましょう:
template<typename T, size_t n> size_t array_size(const T (&)[n]) { return n; }
このテンプレートの目的引数として渡された配列のサイズを決定することです。配列を参照によって渡すと、単にポインタを取得するのではなく、そのサイズが保持されます。
説明
これを理解するには、次の点を考慮してください。
テンプレート関数では、配列は参照によって渡され、そのサイズが確実にキャプチャされます。テンプレートは、サイズ (n) と要素タイプ (T) を自動的に推定します。これにより、
size_t array_size(const int (&)[3]) { return 3; }
として利用できるようになります。
size_t size_of_a = array_size(a);
高度な使用法
があります。コンパイル時のサイズ決定を可能にするこの手法のバリエーション:
template<typename T, size_t n> char (& array_size(const T (&)[n]) )[n];
このテンプレートは、サイズ n の char 型の配列への参照。そのため、次のコードはコンパイル時に渡される配列のサイズを示します:
size_t size_of_a = sizeof(array_size(a));
この構造により、コンパイル時に決定される配列サイズが有効になり、次のようなアクションがサポートされます:
int havingSameSize[sizeof(array_size(a))];
以上がテンプレート関数はコンパイル時に C 配列のサイズをどのように決定できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。