首页  >  文章  >  后端开发  >  除了 `std::exception` 之外,您可以扩展 C 标准库中的其他类吗?

除了 `std::exception` 之外,您可以扩展 C 标准库中的其他类吗?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-03 12:33:31501浏览

Can You Extend Other Classes in the C   Standard Library Beyond `std::exception`?

通过继承扩展 C 标准库

C 标准库被广泛认为是难以接近的继承堡垒,但它背后隐藏着一个隐藏的异常它的队伍。 std::exception 类是独立的,是为扩展而明确设计的唯一实体。这就引出了一个问题:

其他标准库类可以扩展吗?

虽然不存在明确的列表,但答案取决于破译标准的意图。务实的方法包括仔细审查以下标准:

  • 缺乏虚拟方法:缺乏虚拟方法的类不适用于基继承(例如 std::vector)。
  • 虚方法的存在:这些类可以作为潜在的基类。
  • 友元声明:大量的友元声明表明封装问题,不鼓励继承。
  • 模板性质: 模板值得评估;专业化通常足以进行定制。
  • 基于策略的机制:这些类(例如 std::char_traits)通常会抵制继承。

含义从标准库类继承的

扩展 std::exception 突出了另一个问题:

遵守接口期望

当继承自标准库类,必须尊重继承的接口。例如,更改 What() 成员函数以返回空指针而不是有效描述的子类将违反 ISO 标准中指定的接口。虽然严格来说不是标准一致性问题,但它会损害正确性并破坏基类的可替代性原则。

以上是除了 `std::exception` 之外,您可以扩展 C 标准库中的其他类吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn