标准库实现可以专用于标准类型吗?

问题描述:

例如,为了说明的缘故,我们假设找到了一​​个整型向量的更高效的(存储,操作)实现(与通用向量实现相比)。一个标准的遵守库可以做类似的事情:标准库实现可以专用于标准类型吗?

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<integral_type, A>内部映射class vector_integral<T, A>
  • vector<anything_else, A>内部映射class vector<T, A>

- 这显然不是在标准中明确提到的专业化,像std::vector<bool>

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

- 让我们忽略concepts,因为他们还没有标准。除非你有一些事实。

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

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

据我所知,vector<bool>专业化是因为其内部数据布局不同于通用的vector<T>库类,因此需要标准明确允许专业化。

立场明确表示17.5.1.4广告。 7

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