Изменения

Перейти к: навигация, поиск

Участник:Qwerty787788/плюсы3сем

64 байта убрано, 03:50, 20 января 2013
м
concepts
Это описание свойств типа, необходимых для работы в шаблоне. Компилятор на основе этих данных может производить дополнительные оптимизации, а программист может указывать, что ему нужно от типа, который дают шаблону. В сущности, это нововведение лишь даёт мизерный прирост к скорости и делает более понятными некоторые сообщения компилятора об ошибках.
<source lang=Cpp> auto concept LessThanComparable<typename T> {
requires SomeConcept<T>;
bool operator<(T, T);
}</source>
* Ключевое слово auto указывает, что проверять на совместимость с концептом надо любые типы. Всё, что подошло по условию, концептом поддерживается.
Применить его можно так:
<source lang=Cpp> template<LessThanComparable T> const T& min(const T &x, const T &y) {
return (y < x) ? y : x;
}</source>
Или так:
<source lang=Cpp> template<typename T> requires LessThanComparable<T> const T& min(const T &x, const T &y) {
return (y < x) ? y : x;
}</source>
Последний способ лучше тем, что позволяет указать для типа несколько требований одновременно без необходимости создавать новый концепт, содержащий их все. К слову, концепты можно и наследовать, хотя это и аналогично применению requires.
12
правок

Навигация