3

Scala trait Haskell 类型类和 C++0x 概念有什么区别?

就像下面这个例子中 Observer 声明一个抽象成员 receiveUpdate Observer 实际上是一个“匿名”类型或结构类型。

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))
}
4

1 回答 1

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

所以他们中只有两个有共同点,但不是很多,那就是概念和类型类。本文已经对两者进行了比较:A comparison of C++ concept and Haskell type classes

于 2010-06-23T21:47:05.383 回答