Ограничение параметров шаблона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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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