在 C 中,引用某个对象时需要“typename”关键字嵌套名称是从属名称,即嵌套在具有未知参数的模板实例中。
从属名称是一个在编译时无法完全解析的名称,因为它依赖于模板参数。例如,在下面的代码中:
template<class K> class C { struct P {}; vector<P> vec; void f(); }; template<class K> void C<K>::f() { typename vector<P>::iterator p = vec.begin(); }
名称向量
::iterator是一个依赖名称,因为它依赖于模板参数K。在编译时,编译器不知道该值K,因此它无法完全解析名称向量
::iterator。
“typename”关键字用于告诉编译器该名称vector
::iterator 是一个类型名称,即使它无法在编译时完全解析。这是必要的,因为编译器需要知道变量 p 的类型才能生成正确的代码。
还有其他情况必须指定“typename”,例如引用嵌套类型时在模板类中声明。例如,在以下代码中:
template<class T> struct A { typedef typename T::type my_type; };
名称 typename T::type 是在模板类 A 内部声明的嵌套类型名称。在编译时,编译器不知道T,因此它无法完全解析名称 typename T::type。
“typename”关键字用于告诉编译器名称 typename T::type 是一个类型名称,即使它无法在编译时完全解决。这是必要的,因为编译器需要知道变量 my_type 的类型才能生成正确的代码。
以上是什么时候需要 C `typename` 关键字?的详细内容。更多信息请关注PHP中文网其他相关文章!