将std :: sort限制为随机访问迭代器

fre*_*low 6 c++ algorithm iterator stl type-traits

我只是想知道,因为你std::sort无论如何只能传递随机访问迭代器,为什么不通过首先为随机访问迭代器定义它来强制执行该限制?

#include <iterator>
#include <type_traits>

template <typename ForwardIterator>
typename std::enable_if<
    std::is_same<
        typename std::iterator_traits<ForwardIterator>::iterator_category,
        std::random_access_iterator_tag>::value,
    void>
::type sort(ForwardIterator begin, ForwardIterator end)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我发现单行错误消息比实现中远远类型错误导致的错误消息的页面和页面更容易阅读.

您可以对其他算法执行相同的操作.标准的C++核心语言一直都足以表达这项任务,对吧?那么,为什么没有这样做的任何特殊原因?

Bar*_*nau 6

核心语言一直表达足以表达这样的检查,但是当第一个标准准备好时(大约在1996/1997),您可以使用SFINAE(enable_if所基于的)的技巧尚不清楚并且支持高级模板魔法在编译器中受到限制.

因此,标准没有强制要求的原因是因为尚未发明所需的技术.
编译器/图书馆编写者之后没有添加它的原因可能只是简单的经济学:没有足够的人要求这个功能,当人们开始要求更好的诊断时,希望是关于它的概念提议.不幸的是,事实证明这有点太难以及时完成.