为什么有两个std :: sort实现(有和没有比较器)而不是一个带有默认模板参数的实现?

Dav*_*ams 2 c++ parameters templates stl default

在我的代码中,我采用的设计策略类似于一些标准库算法,因为确切的行为可以由函数对象定制.最简单的例子是std :: sort,其中函数对象可以控制如何在对象之间进行比较.

我注意到Visual C++提供了std :: sort的两个实现,这自然涉及代码重复.我本以为可能只有一个实现,并提供默认比较器(使用operator <)作为默认模板参数.

两个独立版本背后的理性是什么?我的建议会以某种方式使界面更复杂吗?或者当对象不提供运算符<?时导致混淆错误消息 或者它可能只是不起作用?

谢谢,

大卫

Set*_*gie 12

因为标准不允许函数模板具有默认类型参数.

然而,这在C++ 11中进行了修改,现在函数模板可以具有默认类型参数.

  • 我会提到这一点,虽然正确,但这只是一个历史原因,因为C++ 11允许它. (3认同)