Scala特性与C ++概念之间的区别

时间:2010-06-23 20:19:29

标签: scala c++11 typeclass traits c++-concepts

Scala特性Haskell类型类和C ++ 0x概念之间有什么区别?

在下面的示例中,Observer声明了一个抽象成员receiveUpdate 观察者实际上是“匿名”类型或结构类型。

package observer
trait Subject {
   type Observer = { def receiveUpdate(subject: Any) }
   private var observers = List[Observer]()
   def addObserver(observer:Observer) = observers ::= observer
   def notifyObservers = observers foreach (_.receiveUpdate(this))
}

1 个答案:

答案 0 :(得分:7)

  • 概念不是来自C ++ 0x,它们已在规范草案的最后几个版本中被删除。
  • 最初设计用于参数多态的有界量化的类型类(通用约束,“forall x使得x是......”)以及为完全类型推断语言提供ad-hoc多态性的机制临时方式。
  • 概念也用于参数多态的有界量化并提供概念重载,这弥补了C ++中缺少部分特化模板函数。它们最初设计用于处理C ++中的模板错误消息问题。
  • 特征是混合行为的机制,不使用多重继承。

因此,只有两个有共同点,但不是很多,即Concepts和Type-classes。本文中已经对两者进行了比较:A comparison of C++ concepts and Haskell type classes

相关问题