首页 > 后端开发 > C++ > 为什么派生模板类不能直接访问基模板类标识符?

为什么派生模板类不能直接访问基模板类标识符?

DDD
发布: 2024-11-16 03:01:02
原创
890 人浏览过

Why Can't Derived Template Classes Access Base Template Class Identifiers Directly?

为什么派生模板类无法访问基本模板类标识符

在 C 中,派生模板类可能无法直接访问标识符其基本模板类。这种行为称为两阶段查找,是由 C 规范强制执行的。

考虑以下代码片段:

template <typename T>
class Base
{
    public:
        static const bool ZEROFILL = true;
        static const bool NO_ZEROFILL = false;
}

template <typename T>
class Derived : public Base<T>
{
    public: 
        Derived( bool initZero = NO_ZEROFILL );    // NO_ZEROFILL is not visible
        ~Derived();
}
登录后复制

在此示例中,派生类 Derived 无法直接访问来自其基类 Base 的 NO_ZEROFILL 标识符。这是因为,在模板定义阶段,编译器没有实际的类型来替代 T。因此,它无法解析 Base 中定义的标识符。并要求它们使用基类名称显式限定。

此行为可确保即使使用不同类型实例化类,模板类中标识符的含义也是明确定义的。 Base的每个实例都包含有自己的一组静态成员“ZEROFILL”和“NO_ZEROFILL”,并且编译器只会在使用特定类型参数实例化模板时验证代码的有效性。

要解决所提供代码中的问题,您可以使用基类名称显式限定 NO_ZEROFILL 标识符,如下所示:

Derived( bool initZero = Base<T>::NO_ZEROFILL );
登录后复制

以上是为什么派生模板类不能直接访问基模板类标识符?的详细内容。更多信息请关注PHP中文网其他相关文章!

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