日历

September 2020
M T W T F S S
 123456
78910111213
14151617181920
21222324252627
282930  

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

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

  • This topic is empty.
Viewing 2 reply threads
  • Author
    Posts
    • #1043
      Todd
      Member

      最近看到一位C++高手认为如果C++0x引入了concept(我认为本质上是带静态类型检查的duck typing)就可以不需要继承多态了。我对此持反对意见,我认为继承多态适合于top-down的设计方式;而concept适合于bottom-up的设计方式。二者在设计中都是需要。想听听郑老师的意见。

      http://www.cppblog.com/longshanks/archive/2007/12/06/37915.html

    • #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

    • #1181
      Todd
      Member

      听说concept被C++0x移除了,不过在学习了解concept的过程中还是有不少收获。我起初认识concept是因为C++模版对类型参数的要求是隐式的,用户只能通过文档或者模版实现才能知晓,不够规范。所以希望能有一种机制能显式地声明模版的参数要求,这就是concept的作用之一。后来发现boost有concept check库,能部分模拟concetp的效果。

Viewing 2 reply threads
  • You must be logged in to reply to this topic.
 请您评分1星(很差)2星(不行)3星(一般)4星(不错)5星(很棒)