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

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

Сообщение Anonymous »

В C++20 вместо выполнения

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

size_t count = 42;
std::vector my_vector;
vec.reserve(count);
std::copy_n(std::istream_iterator(std::cin), count, std::back_inserter(vec));
Я хочу иметь возможность просто сказать

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

std::vector my_vector = get_from_cin(42);
Проблема в том, что я также хочу иметь аналогичную возможность для std::list:

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

std::list my_list = get_from_cin(42);
поэтому я попробовал определить два шаблона функций:

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

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);
}
что (как и ожидалось) приводит к неоднозначности при специализации шаблона:

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

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
Как я могу изменить код, чтобы устранить эту двусмысленность и полученный код вызова шаблонной функции максимально лаконичен?
PS. Я бы просто назвал эти две функции по-другому, но это противоречит стилю C++.

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Специализация шаблона функции C ++ на основе шаблонного возврата типа
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Специализация шаблона одного метода из шаблонного класса
    Anonymous » » в форуме C++
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Специализация функции члена из шаблонного класса внутри тела класса
    Anonymous » » в форуме C++
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Специализация функции члена из шаблонного класса внутри тела класса
    Anonymous » » в форуме C++
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Как ограничить аргумент шаблона шаблона C ++ быть ребенком шаблонного типа?
    Anonymous » » в форуме C++
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

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