在 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(); };
在此示例中,派生类无法访问定义的 NO_ZEROFILL 标识符在基类中。这种行为是由 C 中的两阶段查找机制引起的。
在模板扩展期间,基类模板会使用 T 的特定类型进行实例化。在这种情况下,编译器不知道 T 的实际类型。 T 直到使用模板。因此,它无法解析基类中依赖于 T 的标识符,例如 NO_ZEROFILL。
要解决此问题,您必须在访问其标识符时显式指定基类模板。例如,您需要编写 Derived
此显式基类模板规范指示编译器在 Derived
以上是为什么派生模板类无法访问基模板类标识符?的详细内容。更多信息请关注PHP中文网其他相关文章!