C++中typename
时间: 2023-07-11 21:25:47 浏览: 103
C++关键字typename的深入理解
在 C++ 中,`typename` 关键字有两个作用:
1. 声明一个类型
在模板编程中,`typename` 通常用于声明一个类型,例如:
```cpp
template <typename T>
void printSize(const T& value) {
typename T::size_type size; // 声明 T 类型中的 size_type 类型
size = value.size();
std::cout << "size of value: " << size << std::endl;
}
```
在上面的例子中,我们使用 `typename` 将 `T::size_type` 声明为一个类型,以便编译器能够正确地识别 `size` 变量的类型。
2. 标识依赖名字
在 C++ 中,如果一个名字在模板参数中出现,且它的类型依赖于模板参数,那么编译器无法确定它是一个类型还是一个成员变量或成员函数。此时需要使用 `typename` 关键字来告诉编译器这个名字是一个类型。例如:
```cpp
template <typename T>
void printFirst(const T& container) {
typename T::const_iterator it; // 声明 T 类型中的 const_iterator 类型
it = container.begin();
std::cout << "first element: " << *it << std::endl;
}
```
在上面的例子中,我们使用 `typename` 告诉编译器 `T::const_iterator` 是一个类型,以便编译器能够正确地识别 `it` 变量的类型。
需要注意的是,`typename` 关键字只有在出现依赖名字时才需要使用,在其他情况下不需要加上 `typename`。
阅读全文