C++におけるtypenameの用途は何ですか?
C++ではtypenameキーワードは、ある型が型名であることを示すために使われます。主に2つの用途があります。
- テンプレートで型の引数として指定されているのは型であり、変数ではありません:
template <typename T>
void foo() {
typename T::iterator it; // 指定 T::iterator 是一个类型
// ...
}
上記の例で、T がクラステンプレートパラメータの場合、T::iterator が変数ではなく型であることをコンパイラに伝えるためにtypename キーワードを使います。
- ネストされた従属型名で、コンパイラにそれが型であって静的メンバではないことを伝えるために使用される:
template <typename T>
void foo(T t) {
typename T::value_type var; // 指定 T::value_type 是一个类型
// ...
}
上記の例では、T がクラステンプレートパラメータのとき、typename キーワードを使用し、T::value_type が静的メンバではなく型であることをコンパイラに示します。
テンプレート内だけで使用できるキーワードで、テンプレートパラメータとセットで使われます。また、型の明示が必要な場合にのみ使用し、不要な場合には使用しない注意が必要です。