【问题标题】:Difference between Scala trait and C++ conceptsScala trait 和 C++ 概念之间的区别
【发布时间】:2011-03-07 12:29:24
【问题描述】:

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

就像下面这个例子中观察者声明一个抽象成员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))
}

【问题讨论】:

  • 我找到了Scala中haskell Eq和Ord Type类的比较blog.tmorris.net/…我不明白哪个更强大,为什么

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


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

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

【讨论】:

  • 我不认为#3 是一个大问题,因为每个人都只是使用静态朋友类实现并获得相同的效果。此外,仅允许部分功能规范比了解整个概念要容易得多。
  • @DeadMG:什么问题?得到什么一样的效果?您可以使用标记类型分派技术模拟模板函数的部分特化,这正是当前使用迭代器概念和通用算法针对“特化”算法所做的,具体取决于迭代器/容器类型特征。无论如何,我从来没有试图就问题进行任何辩论,这只是偏离了主要话题。
猜你喜欢
  • 2016-04-24
  • 2013-12-23
  • 2011-06-08
  • 2012-03-23
  • 2019-05-17
  • 2012-06-02
  • 2021-12-09
  • 1970-01-01
  • 2023-03-10
相关资源
最近更新 更多