【问题标题】:Can a standard library implementation specialize standard types?标准库实现可以专门化标准类型吗?
【发布时间】:2015-09-21 12:07:54
【问题描述】:

例如,为了论证,我们假设找到了一​​个更有效的(存储,对它的操作)实现整数类型的向量(与通用向量实现相比)。符合标准的库可以执行以下操作:

template <class T, class A, class Enable = void>
class vector { ... };

template <class T>
class vector<T, A, std::enable_if_t<std::is_integral<T>::value>> { ... };

我认为由于额外的模板参数,这将是非法的。

但是一点编译器魔法呢:(除了额外的实现工作)是否允许这样的事情:

  • vector&lt;integral_type, A&gt;内部映射class vector_integral&lt;T, A&gt;
  • vector&lt;anything_else, A&gt;内部映射class vector&lt;T, A&gt;

- 这显然与标准中明确提到的专业无关,例如std::vector&lt;bool&gt;

- 专业化显然具有相同的接口和可观察的行为。

- 让我们忽略concepts,因为它们还不是标准的。除非你有一些事实。

- 这是一个纯粹的学术问题(阅读个人好奇心)。

【问题讨论】:

    标签: c++ language-lawyer standards-compliance c++-standard-library


    【解决方案1】:

    只要标准库实现符合标准发布的保证,就可以有专门化。这些保证显然包括增长的复杂性、接口功能以及某些类的数据内部布局。

    据我所知,vector&lt;bool&gt; 特化已包含在标准中,因为它的内部数据布局不同于通用的 vector&lt;T&gt; 库类,因此它需要得到标准的特别允许。

    标准明确规定 17.5.1.4 广告。 7

    库子句中指定的复杂性要求是上限,提供更好的复杂性保证的实现满足要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2020-01-07
      • 2012-02-28
      • 2021-06-01
      相关资源
      最近更新 更多