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

sky*_*yde 3 scala traits typeclass c++11 c++-concepts

Scala traits Haskell类型类和C++ 0x Concepts之间有什么区别?

就像下面这个例子中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))
}
Run Code Online (Sandbox Code Playgroud)

snk*_*kid 7

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

因此,只有两个有共同点,但不是很多,即Concepts和Type-classes.本文中已经对两者进行了比较:C++概念和Haskell类型类的比较