В чем разница между использованием `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

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