首页 > 后端开发 > C++ > 如何在 C 中访问派生类模板中的基类 Typedef?

如何在 C 中访问派生类模板中的基类 Typedef?

Mary-Kate Olsen
发布: 2024-12-19 12:52:09
原创
930 人浏览过

How Can I Access Base Class Typedefs in Derived Class Templates in C  ?

派生类的模板类型定义

在 C 中,模板允许定义泛型类和数据结构。但是,将 typedef 从基类传播到派生类需要特定的处理。

考虑以下代码:

template<typename T>
class A {
public:
    typedef std::vector<T> Vec_t;
};

template<typename T>
class B : public A<T> {
private:
    Vec_t v; // Error: Vec_t is not recognized
};
登录后复制

在此示例中,类 A 为 T 类型的向量定义了 typedef。 ,当尝试在派生类 B 中使用此 typedef 时,会发生错误,因为 B 的作用域内无法识别 Vec_t。

原因这个问题源于 C 标准对模板基类范围的处理。根据标准第 14.6.2/3 节:

“在类模板或类模板成员的定义中,如果类模板的基类依赖于模板参数,则在非限定名称查找期间不会检查基类作用域...”

这意味着在使用非限定名称时,基类中定义的 typedef 不会自动在派生类的作用域中可用。要解决此问题,typedef 必须是完全限定的:

typename A<T>::Vec_t v;
登录后复制

通过使用 typename 关键字后跟 typedef 的完全限定名称,您可以显式指定要使用基类中的 typedef 。这将按预期工作,并允许您访问派生类中的向量 typedef。

以上是如何在 C 中访问派生类模板中的基类 Typedef?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板