日历

November 2020
M T W T F S S
 1
2345678
9101112131415
16171819202122
23242526272829
30  

Reply To: duck typing可以取代继承多态吗?

Home Forums 《冒号课堂》讨论区 duck typing可以取代继承多态吗? Reply To: duck typing可以取代继承多态吗?

#1180
hui
Keymaster

在c++中,子类型多态(即你提到的继承多态)与参数多态的一个区别是绑定时间,导致前者运行效率不如后者,但不会如后者那样代码膨胀(code bloat)且难以调试。它们的另一个区别是类型的匹配方式:前者按名字(named conformance),后者按结构(structural conformance)的。前一种风格是优点是规范明确,缺点是灵活度低;后一种风格则正相反。C++0X中的concept是对参数多态的一种改进,在保持原有优点的情况下,还试图吸收子类型多态的规范更明确、类型检查更早(不用等到template instantiation time)、编译出错代码更理想等优点。然而不管怎样,concept的类型匹配还是隐式的(implicit)或自动的(automatic),这种灵活性还是有可能带来非预期的类型匹配问题。因此,子类型多态仍有其用武之地。

P.S. concept尽管被广泛看好,遗憾的是,它仍于去年七月被标准委员会从C++0x中移除了( http://www.drdobbs.com/cpp/218600111

 请您评分1星(很差)2星(不行)3星(一般)4星(不错)5星(很棒)