为什么要区分泛型算法的谓词和非谓词版本
Why differentiate predicate and non-predicate versions for generic algorithms?
标准库确实区分了通用算法的谓词和非谓词版本。例如,std::sort()
如下所示:
template< class RandomIt >
void sort( RandomIt first, RandomIt last );
template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );
只写以下内容有什么问题吗?
template< class RandomIt, class Compare = std::less<void>>
void sort( RandomIt first, RandomIt last, Compare comp = Compare{});
几乎是历史原因。
C++98/03 没有函数模板的默认模板参数,因此它必须使用两个重载。之后更改它可能会破坏用户代码。
所以,假设我们只是重新设计整个事情,应该是第二种形式 是首选?
这就是当前的RangesTS工作草案所做的。
相关文章:
- std::condition_variable::wait()如何评估给定的谓词
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 导入库可以跨dll版本工作吗
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 在clang++预处理器中确定gcc工具链版本
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 不同的Visual Studio版本中缺少.dll
- 用符号版本替换对函数的所有调用
- luaL_dofile在已知良好的字节码上失败,可以使用未编译的版本
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 我需要分发哪些版本的可再分发文件
- CV_OCL_RUN宏如何在OpenCV(版本3.4.5)的goodFeaturesToTrack实现中工作?
- 在运行时读取 libstdc++ 版本
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- C++ std::all_of() 的二进制谓词版本?
- 为什么谓词版本的lower_bound和upper_bound传递迭代器值不一致
- 为什么要区分泛型算法的谓词和非谓词版本
- 错误C2914:排序函数无法识别要使用重载谓词的哪个版本