Страницы

Поиск по вопросам

воскресенье, 1 декабря 2019 г.

Существует ли проверка интерфейса шаблона C++?

#cpp #cpp14


В книге Бьярне Страуструпа "Программирование. Принципы и практика с использованием
C++, 2-е издание.", глава 19, пункт 19.3.3 написано, что в С++14 мы можем использовать
и применять к аргументам шаблона некую концепцию или требования шаблона.

template  // Для всех типов T
    requires Element() // таких, что является Element 
 class vector {
 // . . .
 };


Вот пара концепций, которые предоставлены в книге (там их много):

Element (): Е может быть элементом контейнера
Number () : N ведет себя как число, поддерживая операции +, -, * и /.


Но этот код не компилируется. Пожалуйста, объясните есть ли ключевое слово requires
и вообще концепции шаблонов в С++?
    


Ответы

Ответ 1



Концепций нет в С++14, и их не будет в С++17. В настоящее время концепции реализованы только в GCC 6.1+, и включаются ключом командной строки -fconcepts: > type main.cpp #include template requires sizeof(T) < 4 void f() { std::cout << "< 4\n"; } template requires sizeof(T) >= 4 void f() { std::cout << ">= 4\n"; } int main() { f(); f(); } > g++ -fconcepts -std=c++14 -Wall -pedantic main.cpp && a < 4 >= 4 Краткое описание синтаксиса можно прочитать на cppreference.

Комментариев нет:

Отправить комментарий