В чем разница между использованием `enable_if` в спецификации шаблона и в типе возвращаемого значения?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 В чем разница между использованием `enable_if` в спецификации шаблона и в типе возвращаемого значения?

Сообщение Anonymous »

Я пытаюсь написать шаблон функции make, который создает различные объекты на основе указанного параметра шаблона. Вызов этой функции может выглядеть примерно так: make(1, 8);. Для этого я использую SFINAE, но мне не ясно, лучше ли использовать Enable_if_t для указания типа возвращаемого значения или использовать его как значение по умолчанию в спецификации шаблона.
На мой взгляд, возможные объявления этой функции могут выглядеть так:
Вариант 1 — указать тип возвращаемого значения

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

template
std::enable_if_t make(int8_t first, int8_t second);
Вариант 2 — значение по умолчанию в спецификации шаблона

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

template
return_type make(int8_t first, int8_t second);
Для каждого из этих параметров будет несколько разных шаблонов функций одного стиля для разных типов возвращаемых значений, таких как std::unordered_set и std::vector.
Мои вопросы
Является ли один из этих вариантов лучше или более надежным, чем другой? Мне кажется, что после успешной замены они оба дадут одно и то же, но, возможно, они обрабатывают ошибку замены по-разному?
Я знаю, что мне нужно быть осторожным с шаблонами функций, которые отличаются только значениями параметров шаблона по умолчанию; имеет ли это значение, поскольку значение по умолчанию в варианте 2 зависит от параметра шаблона, у которого нет значения по умолчанию?
Примечания
Я использую C+ +17, и это изменить нельзя, но ответы, касающиеся других стандартов, по-прежнему очень приветствуются! Кроме того, типы, используемые в моем проекте, являются пользовательскими типами, а не стандартными контейнерами, поэтому этот вопрос на самом деле не касается различных способов создания контейнеров.

Подробнее здесь: https://stackoverflow.com/questions/793 ... fication-v
Ответить

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

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

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

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

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