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

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

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

Author24 — интернет-сервис помощи студентам
Собсно
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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: невозможно обратиться к...

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

7
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
18.12.2011, 09:05 2
вместо
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 3
Вы пытаетесь сделать странную штуку. Нагородили класс с темплейтными параметрами, но чтобы его инстанцыровать приходится указывать как тип контейнера, так и тип элементов контейнера. Из-за необходимости указывать аллокаторы класс получился сложным, непереносимым и т.п.
Раз приходится указывать и контейнер и тип элементов, не проще ли написать шаблон с одним параметром и указывать ему сразу std::vector<int> или std::list<char> и т.п? Кажется это будет выглядеть проще и понятнее.
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
18.12.2011, 12:17  [ТС] 4
Я не умею написать шаблон с одним параметром, имея ввиду что фактически параметром шаблона может быть, например:
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 5
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
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
18.12.2011, 13:13  [ТС] 6
Щас уже я не вспомню почему я прошёл мимо такого хорошего способа, придётся возвращаться в начало и всё по новой писать, но, сдаётся мне были какие-то причины на это. То ли мне нужна была идентификация как контейнера, так и его элементов, то ли что ещё.
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
18.12.2011, 13:41 7
Если в своем шаблонном классе с переданным типом вы будете работать как с контейнером и переданный тип будет контейнером - все будет компилится.
например если вы будете использовать Container::iterator и у переданного типа будет этот вложенный тип - все будет ок. Если же вы передатите своему шаблону скажем int, компилятор будет ругаться на конструкцию Container::iterator, потому что у инта нет никаких итераторов. Ошибка может быть малопонятной, но она будет. Можете считать это той самой идентификацией в компайл тайме.
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
18.12.2011, 15:39  [ТС] 8
У меня внутри класса объявлен вектор:
C++
1
2
protected:
  vector<T, t_> vec;
И мне нужно чтобы это был обязательно вектор и надо чтобы T обязательно было именем вложенного типа, даже если тип, к примеру list <float>, вот одна из причин по которой я вынужден был отказаться от такого простого способа шаблонирования.
0
18.12.2011, 15:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.12.2011, 15:39
Помогаю со студенческими работами здесь

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

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

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

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

Перегрузка операторов в шаблонном классе
Привет! У меня есть шаблонный класс содержащий массив и его размер: Vector.h #pragma once...

Конструктор копирования в шаблонном классе
//Header.h #include &lt;iostream&gt; #include &lt;conio.h&gt; #define NULL 0 template &lt;typename T&gt;...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru