什么时候需要“typename”关键字?
在 C 中,“typename”关键字用于消除依赖的嵌套名称的歧义关于模板参数。
示例中为什么需要“typename”代码?
示例代码定义了一个带有嵌套结构体 P 的类 C。在成员函数 f() 内,行:
typename vector<P>::iterator p = vec.begin();
需要使用“typename” " 因为:
是依赖于类 C 的模板参数 K 的嵌套名称。
::iterator 是类型还是模板。
“typename”为的其他情况必要:
在以下情况下还需要“typename”:
template<typename T> class A { public: void f(typename T::P& p); // Requires "typename" };
template<typename T> class A { public: template<typename U> void g(typename T::template F<U>& f); // Requires "typename" };
template<typename T> class A { public: template<> void g<int>(typename T::F<int>& f); // Requires "typename" };
一般来说,任何时候你需要引用依赖嵌套名称, “typename”关键字对于消除模板中类型的歧义是必要的。
以上是C 模板中何时需要'typename”关键字?的详细内容。更多信息请关注PHP中文网其他相关文章!