Ограничение параметров шаблонаC++

Программы на C++. Форум разработчиков
Anonymous
Ограничение параметров шаблона

Сообщение Anonymous »

Предположим, у меня есть шаблон класса Angle, и я хочу ограничить создание экземпляров T, которые являются типами с плавающей запятой.
Подход SFINAE:

Код: Выделить всё

template 
struct Angle { T m_radians; };
C++20 дает нам концепции:

Код: Выделить всё

template 
struct Angle { T m_radians; };
В качестве альтернативы я мог бы ограничить тип с помощью static_assert:

Код: Выделить всё

template 
struct Angle {
static_assert(std::is_floating_point_v,
"Angle works only with floating point types.");
T m_radians;
};
Вопрос: Существуют ли ограничения, которые я мог бы наложить на параметры шаблона с помощью концепций/

Код: Выделить всё

requires
, чего я не смог сделать с /

Код: Выделить всё

static_assert
?
[Я не спрашиваю мнения о том, какой метод лучше. Кроме того, я понимаю, что такие концепции, как Enable_if, могут использовать SFINAE для исключения перегрузок и специализаций из рассмотрения во время разрешения, чего нельзя сделать с помощью static_assert. Мой вопрос касается исключительно ограничений.]

Подробнее здесь: https://stackoverflow.com/questions/680 ... parameters

Вернуться в «C++»