【发布时间】:2012-07-01 03:17:29
【问题描述】:
在我的代码中,我采用了一种类似于某些标准库算法的设计策略,因为可以通过函数对象自定义确切的行为。最简单的例子是 std::sort,其中函数对象可以控制对象之间的比较方式。
我注意到 Visual C++ 提供了两种 std::sort 实现,这自然会涉及代码重复。我会想象它可能只有一个实现,并提供一个默认比较器(使用 operator
两个不同版本背后的原因是什么?我的建议会以某种方式使界面更复杂吗?或者当对象不提供 operator
谢谢,
大卫
【问题讨论】:
-
"我注意到 Visual C++ 提供了 std::sort 的两种实现,这自然会涉及代码重复。" 你为什么会这样认为?明显的实现是对于缺少谓词参数的重载,根据采用谓词参数的重载来实现(为所述参数传递
std::less<typename std::iterator_traits<Iter>::value_type>())。 -
“你为什么会这样想?” - 我正在研究 Visual C++ 附带的算法的实现,并看到两个单独的实现。
-
这是一个单一的、显然很糟糕的实现;我选择了“自然”这个词,这肯定是不准确的。
标签: c++ templates stl parameters default