В Rust основным инструментом для абстракции являются черты. В C++ есть два инструмента для абстракций: абстрактные классы и шаблоны. Чтобы избавиться от некоторых недостатков использования шаблонов (например, трудно читаемых сообщений об ошибках), C++ ввел концепции, которые являются "именованными наборами требований".
Обе функции кажутся довольно похожими:
- Определение черты/концепции осуществляется путем перечисления требований.
- Оба могут быть использованы для привязки/ограничения параметров универсального/шаблонного типа.
- Черты ржавчины и шаблоны C++ с концепциями являются мономорфизированными (я знаю, что черты ржавчины также можно использовать с динамической диспетчеризацией, но это другая история).
Но из того, что я понимаю, есть и заметные отличия. Например, концепции C++, по-видимому, определяют набор выражений, которые должны быть действительными, вместо перечисления сигнатур функций. Но существует много разной и запутанной информации (может быть, потому что концепции появляются только в C++ 20?). Вот почему я хотел бы знать: в чем именно заключаются различия и сходства концепций C++ и признаков Rust?
Есть ли функции, которые предлагаются только концепциями или чертами? Например, как насчет типов и констант, связанных с Rust? Или ограничивает тип несколькими чертами/понятиями?