Специализация шаблона функции C ++ на основе шаблонного возврата типаC++

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

Сообщение Anonymous »

в C ++ 20, вместо того, чтобы делать < /p>

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

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 :

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

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);
|                                  ^~~~~~~~~~~~~~~~~
...
Ссылка Godbolt: https://godbolt.org/z/ebdxtecns
Как я могу изменить код, чтобы эта двусмысленность была устранена, а полученный код для вызова шаблонной функции как можно более кратко? Я бы просто назвал две функции по -разному, но это противоречит стилю C ++.

Подробнее здесь: https://stackoverflow.com/questions/787 ... eturn-type
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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