假设我们有p1、p2、p3三个点,我们可以编写如下代码来测试draw_all():
vector<Shape*> v = { new Circle(p1,20), new Triangle(p1,p2,p3), new Rectangle(p3,30,20) };
draw_all(v);
list<shared_ptr<Shape*>> v2 = { new Circle(p1,20), new Triangle(p1,p2,p3), new Rectangle(p3,30,20) };
draw_all(v2); |
“绘制所有形状”的例子很重要,因为如果你可以很好地实现它,那么你就掌握了大多数面向对象编程中关键的东西。通过融合泛型编程(concepts与模板)、常规编程(例如独立标准库函数mem_fun())、和简单数据抽象(mem_fun()函数返回的函数对象),上面的代码演示了多范型编程的力量。这个简单的示例为我们开启了一扇通往许多优雅和高效的编程技巧的大门。
我希望在看完上面的例子之后,你的反应是“如此简单!”,而不是“如此聪明!如此高级!”在我看来,许多人都在聪明和高级的道路上太过投入。但设计与编程的真正目的是使用最简单的方案来完成工作,并用尽可能清晰的方式来表达。C++0x设计的目标便是更好地支持这样的简单方案.

发表评论