Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052

Поймать контейнер на выходе определяемый шаблонной функцией

15.09.2017, 16:59. Показов 1062. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Функция которой в качестве параметра шаблона передается 1 из последовательных контейнеров;
в качестве аргумента функции передается файл (память под объект раннее выделяется динамически).
Контейнер (например std::vector<int>) заполняется прекрасно, никаких проблем с ним нет.
Но возникает вопрос, как ловить возвращаемый контейнер из функции, явно как-то указать не получится,
ведь может быть контейнер другого типа
Как вариант можно auto res_container = CreateData(file);
Но данный подход к решению мне кажется не совсем верным, у кого-нибудь есть идеи?
C++
1
2
3
4
5
6
7
template<class TypeCont>
TypeCont CreateData(std::fstream *file)
{
    file->seekg(0, std::ios_base::beg);
    TypeCont container((std::istream_iterator<int>(*file)), std::istream_iterator<int>());
    return container;
}
P.s. далее в коде планируется только использование итераторов возвращаемого контейнера begin() & end()
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.09.2017, 16:59
Ответы с готовыми решениями:

Непонятки с шаблонной функцией
Всем привет, у меня возникла следующая проблема: Я описал класс вот так: class MyClass { private: int *intElem = nullptr; ...

Проблема с шаблонной функцией
Приветствую. Возникла следующая проблема: при реализации шаблонной функции невозможно напрямую определить шаблонную переменную для...

Создание dll-файла с шаблонной функцией
Здравствуйте! Требуется создать .dll файл, который будет хранить в себе шаблонную функцию Вот код #ifndef _DLLTEST_H_ #define...

4
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
15.09.2017, 17:06
Цитата Сообщение от anapshy Посмотреть сообщение
явно как-то указать не получится
Шаблоны должны быть полностью определены, иначе ничего не скомпилируется. То есть либо std::vector<int> res_container = CreateData(file); либо auto res_container = CreateData< std::vector<int> >(file);
1
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,030
Записей в блоге: 1
15.09.2017, 17:07
Цитата Сообщение от anapshy Посмотреть сообщение
ведь может быть контейнер другого типа
Но Вы же знаете в вызывающем коде какого именно.

C++
1
ContType cont = CreateData<ContType>(&stream);
1
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
15.09.2017, 17:09
Лучший ответ Сообщение было отмечено anapshy как решение

Решение

Если же речь о том, что аргумент контейнера должен быть не только int, а любой другой, то

C++
1
2
3
4
5
6
7
template<class TypeCont>
TypeCont CreateData(std::fstream *file)
{
    file->seekg(0, std::ios_base::beg);
    TypeCont container((std::istream_iterator<TypeCont::value_type>(*file)), std::istream_iterator<TypeCont::value_type>());
    return container;
}
1
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
15.09.2017, 17:19  [ТС]
Croessmah, а ну да, точно
TRam_, спасибо, об использовании value_type что-то и не подумал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.09.2017, 17:19
Помогаю со студенческими работами здесь

Сортировка элементов массива структур шаблонной функцией
Как отсортировать с помощью шаблонной функции по значению полей в массиве структур? Кто знает, подскажите пожалуйста. Программа, которую...

В чем разница между Си'шным приведением типа и унарной шаблонной функцией static_cast?
В чем разница между Си'шным приведением типа: ... int x{5}; ifs.write( (char*)&amp;x, sizeof(int) ); ... и унарной шаблонной...

Нужно ли страховаться функцией QThread::wait() при выходе из потока?
Ну вопрос в шапке. Собственно, если у меня ран выглядит так: (exit = false конечно же сначала) void COOL::run() { ...

модуль, определяемый пользователем
(для решения задачи создать модуль для работы с массивами соответсвующего типа и размера, содержащий все необходимые процедуры и функции, и...

Тип данных определяемый пользователем
День добрый! В (Declarations) прописан сделующий тип данных определяемый пользователем Public Type Card Name As String Brand...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru