Разница между чертой Scala и концепциями C ++ - PullRequest
3 голосов
/ 24 июня 2010

В чем разница между чертами Scala и классом типов Haskell и C ++ 0x Concepts?

Как и в этом примере ниже, где 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))
}

1 Ответ

7 голосов
/ 24 июня 2010
  • Понятия не приходят в C ++ 0x, они были удалены в нескольких последних версиях черновой спецификации.
  • Классы типов, изначально разработанные для ограниченного количественного определения параметрического полиморфизма (общие ограничения, «так как x такой, что x является ...») и механизм, обеспечивающий специальный полиморфизм для логически выводимого языка полностью типа менее специальным образом.
  • Понятия также предназначены для ограниченногоколичественная оценка параметрического полиморфизма и обеспечение перегрузки концепции, что компенсирует отсутствие частичных специализаций шаблонных функций в C ++.Первоначально они были разработаны для решения проблемы с сообщениями об ошибках шаблона в C ++.
  • Черты - это механизм для смешивания поведения без использования множественного наследования.

Так что только у двух из них есть что-тов общем, но не очень, то есть Concepts и Type-классы.В этой статье уже проводилось сравнение между этими двумя понятиями: Сравнение понятий C ++ и классов типов Haskell

...