当前位置:  开发笔记 > 编程语言 > 正文

对于标准库实现来说,专门化一个带有子概念的概念上的函数是否合法?

如何解决《对于标准库实现来说,专门化一个带有子概念的概念上的函数是否合法?》经验,为你挑选了0个好方法。

使用c ++ 11和c ++ 14库概念,c ++标准库的有效实现可以创建一个概念上模板化的函数的专用版本,以利用子概念的附加功能进行优化,而不是可能只有基本概念,例如InputIterator构造函数std::vector和满足要求的迭代器RandomAccessIterator

// specified by standard
vector(InputIt begin, InputIt end, const Allocator& alloc = Allocator());
// is this specialization allowed in an implementation if it provides the same functionality?
vector(RandomAccessIt begin, RandomAccessIt end, const Allocator& alloc = Allocator());

在这里,InputIt是一种满足InputIterator概念要求的类型,并RandomAccessIt满足要求RandomAccessIterator.值得注意的是,这个概念缺乏找到两个迭代器之间差异的要求,而它的曾孙概念RandomAccessIterator 确实需要

It a,b;
It::difference_type c = a - b;

有效.找到两个迭代器之间的差异将是InputIterator构造函数的帮助,std::vector在这种情况下RandomAccessIterator也是由提供的迭代器实现的概念,因为它允许实现预先分配最终向量所需的空间,而不是调整它的大小施工期间多次.

我可以看到它是有效的,因为标准偶尔使用as-if规则,例如继承层次结构中的虚函数的协变返回类型.但是,情况之间存在相当明显的差异,因此我也可以看到协变返回类型背后的逻辑可能不一定转移到这种情况.


重申一下:c ++标准库的有效实现是否可以创建一个概念上模板化的功能的专用版本,以利用子概念的附加功能进行优化,而单独使用基本概念是不可能的?


注意:我没有使用c ++标记这个问题- 概念,因为据我所知,该标签适用于Concepts-Lite和Concepts TS,这个问题是关于c ++ 11和c ++ 14中的库概念.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有