为什么派生模板类无法访问基本模板类标识符
在 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
要解决所提供代码中的问题,您可以使用基类名称显式限定 NO_ZEROFILL 标识符,如下所示:
Derived( bool initZero = Base<T>::NO_ZEROFILL );
以上是为什么派生模板类不能直接访问基模板类标识符?的详细内容。更多信息请关注PHP中文网其他相关文章!