Наткнулся на интересную
статью.
Довольно приятный синтаксис получается, заодно и шаблоны "очеловечили"
//-- шаблонная функция с концептами
template<typename R, typename T>
requires Range<R>()
&& Equality_comparable<T, Value_type<R>>()
bool in(R const& range, T const& value);
// вариант 2
template<Range R,
Equality_comparable<Value_type<R>> T>
bool in(R const& range, T const& value);
// вариант 3
void sort(Sortable_container& c);
//-- пласехолдеры (вместо auto)
for (Pointer iter = c.begin(); iter != c.end(); ++iter)
// Do stuff
Кстати пишут, что компилятор не проверяет соответствие операций внутри функции с концептом. Т.е.
void sort(Sortable_container& c) {
cout << c; // компилируется, хотя Sortable_container не требует операции вывода в поток
}
Ждем GCC 6
Здравствуйте, enji, Вы писали:
E>Ждем GCC 6
Есть патч с proof-of-concept'ом —
http://rsdn.ru/forum/cpp/5114185.flatАвтор: Evgeny.Panasyuk
Дата: 27.03.13
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Есть патч с proof-of-concept'ом — http://rsdn.ru/forum/cpp/5114185.flatАвтор: Evgeny.Panasyuk
Дата: 27.03.13
А сколько вони было, когда 11 стандарт принимали -- сложно, не нужно, блаблабла. Хотя на первый взгляд, приняли как есть.
Здравствуйте, С3141566=Z, Вы писали:
EP>>Есть патч с proof-of-concept'ом — http://rsdn.ru/forum/cpp/5114185.flatАвтор: Evgeny.Panasyuk
Дата: 27.03.13
СZ>А сколько вони было, когда 11 стандарт принимали -- сложно, не нужно, блаблабла. Хотя на первый взгляд, приняли как есть.
Не, сейчас это сильно облегченная и кардинально переработанная версия. Это по сути enable_if + has_member* на стероидах — проверка синтаксических требований, разбиение на атомы, перегрузка по ним и сахар для объявления шаблонов функций.
Нет например concept map'ов и проверки тел шаблонов на предмет того чтобы они не использовали лишнего (того чего нет в требованиях).
http://www.youtube.com/watch?v=0avh39CI_ls
http://www.youtube.com/watch?v=WmxhlPXJ-OM