gpt4 book ai didi

c++ - 标准库实现可以专门化标准类型吗?

转载 作者:可可西里 更新时间:2023-11-01 17:59:18 26 4
gpt4 key购买 nike

例如,为了论证,我们假设找到了整数类型 vector 的更高效(存储、操作)实现(与通用 vector 实现相比)。符合标准的库可以做类似的事情吗:

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>

<子>- 特化显然具有相同的接口(interface)和可观察的行为。

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

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

最佳答案

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

vector<bool>据我所知,特化包含在标准中,因为它的内部数据布局不同于通用的 vector<T>库类,因此需要标准明确允许。

标准明确表示 17.5.1.4 广告。 7:

Complexity requirements specified in the library clauses are upper bounds, and implementations that provide better complexity guarantees satisfy the requirements.

关于c++ - 标准库实现可以专门化标准类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31210366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com