在 C 中,可以在基类中定义 typedef 来为特定的对象提供方便的别名数据类型。但是,当使用基于模板的基类时,了解这些 typedef 到派生类的传播机制至关重要。
考虑以下示例:
template<typename T> class A { public: typedef std::vector<T> Vec_t; }; template<typename T> class B : public A<T> { private: Vec_t v; // fails - Vec_t is not recognized };
这里,基类类 A 为类型 T 的向量定义了一个名为 Vec_t 的 typedef。在派生类 B 中,当尝试使用 Vec_t 而不完全限定它时(例如, typename A
C 标准 (14.6.2/3) 解释了此行为。根据标准,“在类模板或类模板成员的定义中,如果类模板的基类依赖于模板参数,则在非限定名称查找期间不会检查基类范围。”
因此,在派生类 B 中,无法识别非限定标识符 Vec_t,因为编译器不会检查基类范围以进行非限定名称查找。要正确访问 typedef,需要使用语法 typename A
以上是C 模板中的'typedef”类型传播如何从基类传播到派生类?的详细内容。更多信息请关注PHP中文网其他相关文章!