首页 >后端开发 >C++ >std 命名空间中的专用模板有哪些限制?

std 命名空间中的专用模板有哪些限制?

Susan Sarandon
Susan Sarandon原创
2024-10-30 18:59:30344浏览

 What are the Restrictions on Specializing Templates within the std Namespace?

std 命名空间内的专业化限制

std 命名空间允许对其模板进行显式专业化,但存在特定限制。

禁止特化的模板:

根据 C 标准,以下模板不能在 std 命名空间内特化:

  • numeric_limits for non -算术类型(例如,complex): 仅算术类型可以特化。
  • shared_ptr 和weak_ptr: 必须满足可复制性、可分配性和比较的特定要求。
  • hash: 特化必须符合标准哈希类模板的要求。
  • 类型特征 (): 特化行为除非明确允许,否则未定义(例如,仅允许某些 common_type 专业化)。
  • 语言环境: 具有所需的专业化。
  • istreambuf_iterator: 需要简单的复制构造函数、默认构造函数和析构函数。
  • 非浮点类型的复杂性:为其他类型定义专业化被认为是毫无意义的。
  • 原子: 必须删除复制操作和 constexpr 值构造函数。
  • unary_function 和 binary_function: 专门化已弃用并禁止。

常规限制:

  • 任何专业化不得与原始模板要求冲突。
  • 除非明确指定,否则禁止标准库模板的显式专业化和实例化。
  • 标准库类的成员函数、函数模板或成员类模板的显式特化是未定义的行为。

以上是std 命名空间中的专用模板有哪些限制?的详细内容。更多信息请关注PHP中文网其他相关文章!

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