首页 >后端开发 >C++ >C 模板中何时需要'typename”关键字?

C 模板中何时需要'typename”关键字?

Susan Sarandon
Susan Sarandon原创
2024-12-27 22:51:10380浏览

When is the `typename` Keyword Necessary in C   Templates?

什么时候需要“typename”关键字?

在 C 中,“typename”关键字用于消除依赖的嵌套名称的歧义关于模板参数。

示例中为什么需要“typename”代码?

示例代码定义了一个带有嵌套结构体 P 的类 C。在成员函数 f() 内,行:

typename vector<P>::iterator p = vec.begin();

需要使用“typename” " 因为:

  • 从属名称: 矢量

    是依赖于类 C 的模板参数 K 的嵌套名称。

  • 歧义: 如果没有“typename”,编译器无法确定 vector

    ::iterator 是类型还是模板。

“typename”为的其他情况必要:

在以下情况下还需要“typename”:

  • 引用依赖成员函数:
template<typename T>
class A {
public:
    void f(typename T::P& p); // Requires "typename"
};
  • 引用依赖嵌套template:
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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn