Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705

В шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера

18.12.2011, 04:21. Показов 2220. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собсно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <windows.h>
#include <iterator>
#include <vector>
using namespace std;
 
 
template <class T, template <class, class > class t, class t_= allocator<T> >
class klass {
 public:
  klass (t<T, t_>& prom) {;}
  
  //Вот тут что-то не получается у меня
  t<T, t_>::iterator it;
};
 
 
         //+++++++++++++++++++++++++++++++++++++++++++++++++//
 
 
int main () {
 vector <int> vec;
 klass<int, vector> klass_(vec);
 return 0;
}
Спасибо, кто откликнется
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.12.2011, 04:21
Ответы с готовыми решениями:

Как вы шаблонном классе определить контейнер, тип которого совпадает с именем параметра шаблона?
собсно template &lt;class T&gt; class perestanovki { public: T&lt;int&gt; v; }; int main () {

Итератор в шаблонном классе
итератор в шаблонном классе?

Ошибка в шаблонном классе
Помогите исправить ошибку в 12 строчке: error C2248: CMyClass&lt;T&gt;::m_value: невозможно обратиться к private член, объявленному в классе...

7
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
18.12.2011, 09:05
вместо
C++
1
t<T, t_>::iterator it;
напиши
C++
1
typename t<T, t_>::iterator it;
Добавлено через 48 секунд
чтобы компилятор понял, что t<T, t_>::iterator -- это название типа, а не член класса.
1
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
18.12.2011, 11:19
Вы пытаетесь сделать странную штуку. Нагородили класс с темплейтными параметрами, но чтобы его инстанцыровать приходится указывать как тип контейнера, так и тип элементов контейнера. Из-за необходимости указывать аллокаторы класс получился сложным, непереносимым и т.п.
Раз приходится указывать и контейнер и тип элементов, не проще ли написать шаблон с одним параметром и указывать ему сразу std::vector<int> или std::list<char> и т.п? Кажется это будет выглядеть проще и понятнее.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
18.12.2011, 12:17  [ТС]
Я не умею написать шаблон с одним параметром, имея ввиду что фактически параметром шаблона может быть, например:
C++
1
2
3
vector<int>    или
list    <int>    или
deque<float> или
Был бы благодарен, если бы кто-нибудь показал, как надо
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
18.12.2011, 12:24
std::vector<int> - это тип. Т.к. шаблон параметризуется типами, std::vector<int> - вполне подходит в качестве параметра для шаблона.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <vector>
#include <list>
 
template <class Container>
class MyContainer
{
  Container m_container;
 
public:
  MyContainer()
  {
  }
 
  MyContainer(const Container& c)
    : m_container(c)
  {
  }
};
 
int main()
{
  std::vector<int> vec;
  MyContainer< std::vector<int> > myCont1;
  MyContainer< std::vector<int> > myCont2(vec);
 
  std::list<int> lst;
  MyContainer< std::list<int> > myCont3;
  MyContainer< std::list<int> > myCont4(lst);
 
  return 0;
}
1
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
18.12.2011, 13:13  [ТС]
Щас уже я не вспомню почему я прошёл мимо такого хорошего способа, придётся возвращаться в начало и всё по новой писать, но, сдаётся мне были какие-то причины на это. То ли мне нужна была идентификация как контейнера, так и его элементов, то ли что ещё.
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
18.12.2011, 13:41
Если в своем шаблонном классе с переданным типом вы будете работать как с контейнером и переданный тип будет контейнером - все будет компилится.
например если вы будете использовать Container::iterator и у переданного типа будет этот вложенный тип - все будет ок. Если же вы передатите своему шаблону скажем int, компилятор будет ругаться на конструкцию Container::iterator, потому что у инта нет никаких итераторов. Ошибка может быть малопонятной, но она будет. Можете считать это той самой идентификацией в компайл тайме.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
18.12.2011, 15:39  [ТС]
У меня внутри класса объявлен вектор:
C++
1
2
protected:
  vector<T, t_> vec;
И мне нужно чтобы это был обязательно вектор и надо чтобы T обязательно было именем вложенного типа, даже если тип, к примеру list <float>, вот одна из причин по которой я вынужден был отказаться от такого простого способа шаблонирования.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.12.2011, 15:39
Помогаю со студенческими работами здесь

String в шаблонном классе
Как сделать так, чтобы в Map&lt;int, std::string&gt; A; работало со string'ом С интами чарами и т.д. все хорошо работает, а на string прога...

Ошибки в шаблонном классе
Добрый день. Реализовал класс динамического массива. При проверке его работы столкнулся с ошибками, которые мне пока не удаётся исправить....

Параметры в шаблонном классе
Почему в шаблонном классе при описании функции надо два раза указывать тип параметра? В 1-ой строчке есть T и во 2-ой тоже написано T ...

Итератор контейнера set
Здравствуйте! Каким образом можно изменить значение итератора set на n (кроме вызова ++ n раз). Можно ли преобразовать итератор одного типа...

Итератор для контейнера
Собственно, интересует такой вопрос: &quot;Как создать собственный класс-итератор для контейнера?&quot;. Контейнер построен по типу...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru