整数型のテンプレートパラメータって、何に使うのかと思ってたけど

C++ のテンプレートで、テンプレートパラメータとして型名 (typename) だけではなく、整数型を使うことができます。

整数型のテンプレートパラメータの使い方の例としてよくある(?)のが、階乗のコンパイル時の計算です。ただ、階乗は実用的な例とは言いがたい。階乗の値が静的に必要なら、あらかじめ定数値として書いたほうが早い。

では整数型の実用的な使い方って?と疑問に思っていたところ、たまたま MSDN で次のような関数を見つけてしまいました。

MSDN ライブラリ: getenv_s、_wgetenv_s

template <size_t size>
errno_t getenv_s( 
   size_t *pReturnValue,
   char (&buffer)[size],
   const char *varname 
); // C++ only

なるほどー、配列のサイズをテンプレートパラメータとして取るわけか。配列 buffer のサイズ size はテンプレートパラメータとしてコンパイラが勝手に与えてくれるので、配列のサイズを関数の引数に与える必要がなくなる。コードがすっきりするのですばらしい。

ただ、 C++ ならはじめから std::string とか使えばいいんじゃね、という話もある。