在我的代码中,我采用的设计策略类似于一些标准库算法,因为确切的行为可以由函数对象定制。最简单的例子是std :: sort,其中函数对象可以控制对象之间的比较方式。
我注意到Visual C ++提供了std :: sort的两个实现,这自然涉及代码重复。我本以为可能只有一个实现,并提供默认比较器(使用operator<)作为默认模板参数。
两个独立版本背后的理性是什么?我的建议会以某种方式使界面更复杂吗?或者当对象不提供运算符时导致混淆的错误消息< ?或者它可能不起作用?
谢谢,
大卫
答案 0 :(得分:12)
因为标准不允许函数模板具有默认类型参数。
This, however, was amended in C++11,现在功能模板可以有默认的类型参数。
答案 1 :(得分:2)
在C ++ 11之前,函数模板不能有默认模板参数,并且模板参数不能从默认函数参数中推导出来,因此无法使其工作。
在支持函数模板的默认模板参数的C ++ 11中,您可以使用单个函数模板,但现在更改它会破坏与依赖于具有特定类型的函数的旧C ++代码的向后兼容性。