Код: Выделить всё
size_t count = 42;
std::vector my_vector;
vec.reserve(count);
std::copy_n(std::istream_iterator(std::cin), count, std::back_inserter(vec));
< /code>
Я хочу просто сказать < /p>
std::vector my_vector = get_from_cin(42);
Код: Выделить всё
std::list my_list = get_from_cin(42);
< /code>
Поэтому я попытался определить два шаблона функций: < /p>
template
std::vector get_from_cin(size_t count) {
std::vector vec;
vec.reserve(count);
std::copy_n(std::istream_iterator(std::cin), count, std::back_inserter(vec));
return vec;
}
template
std::list get_from_cin(size_t count) {
std::list list;
std::copy_n(std::istream_iterator(std::cin), count, std::back_inserter(list));
return list;
}
int main() {
std::vector my_vector = get_from_cin(42);
}
< /code>
, который (ожидаемый) приводит к неоднозначности при специализации шаблона: < /p>
main.cpp:36:34: error: call to 'get_from_cin' is ambiguous
36 | std::vector my_vector = get_from_cin(42);
| ^~~~~~~~~~~~~~~~~
...
Как я могу изменить код, чтобы эта двусмысленность была устранена, а полученный код для вызова шаблонной функции как можно более кратко? Я бы просто назвал две функции по -разному, но это противоречит стилю C ++.
Подробнее здесь: https://stackoverflow.com/questions/787 ... eturn-type