派生模板类中基模板类标识符的可见性
考虑以下代码片段:
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(); };
当使用 GCC g 3.4.4 (cygwin) 编译,此代码编译失败,因为NO_ZEROFILL 对于 Derived 模板类不可见。此行为可以归因于 C 中的两阶段查找。
C 中的两阶段查找
当编译器遇到模板声明时,它只执行初步的查找该模板中使用的标识符。由于此阶段尚未确定 T 的实际类型,因此编译器无法解析依赖于此类型的标识符,例如 Base
两阶段查找过程中:
在这种情况下, NO_ZEROFILL 在初步查找期间不可见,因为它取决于未知类型 T。因此,您必须在派生类中显式指定 Base
以上是为什么基模板类的静态成员在派生类中不可访问?的详细内容。更多信息请关注PHP中文网其他相关文章!