2

在我的代码中,我采用了类似于某些标准库算法的设计策略,因为可以通过函数对象自定义确切的行为。最简单的例子是 std::sort,其中函数对象可以控制对象之间的比较方式。

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

两个不同版本背后的原因是什么?我的建议会以某种方式使界面更复杂吗?或者当对象不提供 operator< 时会导致混乱的错误消息?或者它只是不起作用?

谢谢,

大卫

4

2 回答 2

12

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

但是,这已在 C++11 中进行了修改,现在函数模板可以具有默认类型参数。

于 2012-06-29T15:13:16.293 回答
2

在 C++11 之前,函数模板不能有默认模板实参,并且模板实参不能从默认函数实参推导出来,因此无法实现。

在支持函数模板的默认模板参数的 C++11 中,您可以使用单个函数模板,但现在更改它会破坏与依赖于具有特定类型的函数的旧 C++ 代码的向后兼容性。

于 2012-06-29T15:16:00.597 回答