Насколько я понимаю, есть два возможных варианта, как описано ниже:
Код: Выделить всё
#include
#include
#include
/////////////////////////////////////////////////
// Option 1: Specify the return type
/////////////////////////////////////////////////
// make_1 for sets
template
std::enable_if_t make_1(int first, int second){
return return_type({first, second});
}
// make_1 for vectors
template
std::enable_if_t make_1(int first, int second){
return return_type({second, first});
}
// make_1 for other different types
// ...
/////////////////////////////////////////////////
// Option 2: Use a template parameter
/////////////////////////////////////////////////
// make_2 for sets
template
return_type make_2(int first, int second){
return return_type({first, second});
}
// make_2 for vectors
template
return_type make_2(int first, int second){
return return_type({second, first});
}
// make_2 for other different types
// ...
int main() {
auto s1 = make_1(4, 5);
auto v1 = make_1(6, 7);
auto s2 = make_2(7, 8);
auto v2 = make_2(9, 10);
}
Мои вопросы
Является ли один из этих вариантов лучше или надежнее другого? Мне кажется, что после успешной замены они оба дадут одно и то же, но, возможно, они обрабатывают ошибку замены по-разному?
Примечания
Я использую C++17, и это нельзя изменить, но ответы, относящиеся к другим стандартам, по-прежнему приветствуются! Кроме того, типы, используемые в моем проекте, являются пользовательскими типами, а не стандартными контейнерами, поэтому этот вопрос на самом деле не касается различных способов создания контейнеров.
ИзменитьИзначально я также сказал:
Я знаю, что мне нужно быть осторожным с шаблонами функций, которые отличаются только значениями параметров шаблона по умолчанию. ; имеет ли это значение, поскольку значение по умолчанию в варианте 2 зависит от параметра шаблона, у которого нет значения по умолчанию?
Ответ на этот вопрос — да, как уже отмечалось автор @NatanOliver в комментариях. Изменение, которое я внес в свой mwe, означает, что я больше не использую значения по умолчанию для параметров шаблона, что делает этот вопрос излишним.
Подробнее здесь: https://stackoverflow.com/questions/793 ... fication-v
Мобильная версия