В книге Бьярне Страуструпа "Программирование. Принципы и практика с использованием C++, 2-е издание.", глава 19, пункт 19.3.3 написано, что в С++14 мы можем использовать и применять к аргументам шаблона некую концепцию или требования шаблона.
template<typename T> // Для всех типов T
requires Element<T>() // таких, что является Element
class vector {
// . . .
};
Вот пара концепций, которые предоставлены в книге (там их много):
Element<E> (): Е может быть элементом контейнера
Number<N> () : N ведет себя как число, поддерживая операции +, -, * и /.
Но этот код не компилируется. Пожалуйста, объясните есть ли ключевое слово requires и вообще концепции шаблонов в С++?
Концепций нет в С++14, и их не будет в С++17.
В настоящее время концепции реализованы только в GCC 6.1+, и включаются ключом командной строки -fconcepts
:
> type main.cpp
#include <iostream>
template<typename T>
requires sizeof(T) < 4
void f() {
std::cout << "< 4\n";
}
template<typename T>
requires sizeof(T) >= 4
void f() {
std::cout << ">= 4\n";
}
int main() {
f<short>();
f<double>();
}
> g++ -fconcepts -std=c++14 -Wall -pedantic main.cpp && a
< 4
>= 4
Краткое описание синтаксиса можно прочитать на cppreference.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как обнулить значение элемента массива A, если в массиве B существует такое значение, которое при сложении с текущим элементом массива A дает...
ПриветствуюДопустим, имеется изображение: На данном изображении три кривых (графика), части которых могут быть разной толщины или пунктирные/штриховые