Подтвердить что ты не робот

Понятия С++ Concepts позволяют моему классу при объявлении/определении указывать его, удовлетворяют определенной концепции?

В настоящее время лучше всего использовать static_assert, но я бы предпочел лучше.

#include <set>
#include <forward_list>

using namespace std;

template<typename C>
concept bool SizedContainer = requires (C c){
    c.begin();
    c.end();
    {c.size()} -> size_t;
};

static_assert(SizedContainer<std::set<int>>);
static_assert(!SizedContainer<std::forward_list<int>>);
static_assert(!SizedContainer<float>);

class MyContainer{
public:
    void begin(){};
    void end(){};
    size_t size(){return 42;}; 
};

static_assert(SizedContainer<MyContainer>);



int main()
{
}
4b9b3361

Ответ 1

В настоящее время нет, ключевое слово, которое вы искали бы, было бы requires Из cppreference

Ключевое слово requires используется двумя способами: 1) ввести require-clause, которое указывает ограничения на аргументы шаблона или в объявлении функции.

Поскольку вы не имеете дело с объявлением функции, это не имеет значения. Второй случай -

Чтобы начать выражение require, которое является выражением prvalue типа bool, который описывает ограничения на некоторые аргументы шаблона. такие выражение истинно, если соответствующее понятие выполнено и false иначе:

Что еще не актуально здесь, потому что вы не пытаетесь проверить ограничение на некоторые аргументы шаблона