Класс моделирует концепцию? (понятие-черта или наоборот)

Видимо, я упускаю что-то очевидное, скорее всего, из-за СФИНАЕ, но я просто не могу понять, что это такое. я мог вините мой зуб мудрости, но это звучит странно, потому что речь идет о мудрости …

В C ++ при использовании Concepts (Boost, Lite или чего-либо еще) используется что-то вроде REQUIRES(list_of_concepts) чтобы обеспечить это, например: тип в вызове функции следует концепции, как «BidirectionalIteratorAccess«. Но каков соответствующий компонент» запрос «для этой функции? По сути, как я могу просить если модели класса T модели BidirectionalIteratorAccess?

Все, что я знаю, это то, что я не ищу REQUIRES или же BOOST_CONCEPT_ASSERT так как они имеют значение true-or-compilation-error; Я ищу что-то, что правда или ложь, как type_traits, Документация Boost.Concept Assert и других предполагает, что можно использовать проверку SFINAE с чем-то вроде not_satisfied<Concept> но если это так, я по какой-то причине не могу понять, какая часть идет куда. Я могу только догадываться, что тест SFINAE закончится так:

template <typename T> struct models_MyConcept {
template <typename C>
static yes_t test (some_sort_of_argument_using_MyConcept);
template <typename C>
static no_t test (...);
static const bool value = sizeof(something_calling_test_with_a_C_argument_somehow) == sizeof(yes_t);
};

… какой идиот назвал их мудрость зубы в любом случае? И почему я отвлекся?

0

Решение

В Concepts Lite ограничение является constexpr bool функция шаблона, которая возвращает истину тогда и только тогда, когда параметры шаблона моделируют концепцию. Так BidirectionalIteratorAccess<T>() оценил бы true если и только T модели BidirectionalIteratorAccess,

Я понимаю, что этот ответ, вероятно, бесполезен для вас, но вы сказали «Boost, Lite или что-то еще».

0

Другие решения

Других решений пока нет …