Концепции - как ограничить значение интегрального шаблона - PullRequest
1 голос
/ 04 мая 2020

Существует определение шаблона, например:

template<size_t N>
void foo( void ) {
  /* ... */
}

Как определить концепцию, чтобы N было ненулевым положительным значением (N> = 1)?

Что-то как:

template<size_t N>
concept NonZeroSize = /* to be implemented, N>=1 */

template<NonZeroSize N>
void foo( void ) {
  /* Do whatever only if N >= 1 */
}

Спасибо!

1 Ответ

4 голосов
/ 04 мая 2020

Например:

template <size_t N> requires NonZeroSize<N>
void foo();

Или просто:

template <size_t N> requires (N > 0)
void foo();

Более краткая форма зарезервирована для понятий типа.

Само определение понятия является просто произвольным логическим выражением:

template <size_t N>
concept NonZeroSize = (N > 0);

A require-expression - это просто особый вид выражения, который очень полезен в определения понятий, но он не должен иметь для использования во всех определениях понятий, и не должен появляться в определении понятия с самого начала. Эти вещи ортогональны.

...