In C , when a derived template class inherits from a base template class, it's natural to expect the derived class to have access to the base class's identifiers. However, in certain scenarios, you may encounter a situation where this access is restricted.
Consider the following code:
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(); };
In this example, the Derived class cannot access the NO_ZEROFILL identifier defined in the Base class. This behavior is caused by the two-phase lookup mechanism in C .
During template expansion, the base class template is instantiated with a specific type for T. In this case, the compiler does not know the actual type of T until the template is used. Therefore, it cannot resolve identifiers in the base class that depend on T, such as NO_ZEROFILL.
To address this issue, you must explicitly specify the base class template when accessing its identifiers. For example, you would need to write Derived
This explicit base class template specification instructs the compiler to search for the identifier NO_ZEROFILL within the context of the Derived
The above is the detailed content of Why Can\'t Derived Template Classes Access Base Template Class Identifiers?. For more information, please follow other related articles on the PHP Chinese website!