Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
18.12.2011, 04:21     необходимо в шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера #1
Собсно
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;
}
Спасибо, кто откликнется
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2011, 04:21     необходимо в шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера
Посмотрите здесь:

C++ Как вы шаблонном классе определить контейнер, тип которого совпадает с именем параметра шаблона?
Итератор для собственного контейнера C++
C++ Параметры в шаблонном классе
C++ Ошибка в шаблонном классе
итератор для контейнера C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yekka
384 / 148 / 8
Регистрация: 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 -- это название типа, а не член класса.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
18.12.2011, 11:19     необходимо в шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера #3
Вы пытаетесь сделать странную штуку. Нагородили класс с темплейтными параметрами, но чтобы его инстанцыровать приходится указывать как тип контейнера, так и тип элементов контейнера. Из-за необходимости указывать аллокаторы класс получился сложным, непереносимым и т.п.
Раз приходится указывать и контейнер и тип элементов, не проще ли написать шаблон с одним параметром и указывать ему сразу std::vector<int> или std::list<char> и т.п? Кажется это будет выглядеть проще и понятнее.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
18.12.2011, 12:17  [ТС]     необходимо в шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера #4
Я не умею написать шаблон с одним параметром, имея ввиду что фактически параметром шаблона может быть, например:
C++
1
2
3
vector<int>    или
list    <int>    или
deque<float> или
Был бы благодарен, если бы кто-нибудь показал, как надо
DU
1477 / 1053 / 45
Регистрация: 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;
}
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
18.12.2011, 13:13  [ТС]     необходимо в шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера #6
Щас уже я не вспомню почему я прошёл мимо такого хорошего способа, придётся возвращаться в начало и всё по новой писать, но, сдаётся мне были какие-то причины на это. То ли мне нужна была идентификация как контейнера, так и его элементов, то ли что ещё.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
18.12.2011, 13:41     необходимо в шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера #7
Если в своем шаблонном классе с переданным типом вы будете работать как с контейнером и переданный тип будет контейнером - все будет компилится.
например если вы будете использовать Container::iterator и у переданного типа будет этот вложенный тип - все будет ок. Если же вы передатите своему шаблону скажем int, компилятор будет ругаться на конструкцию Container::iterator, потому что у инта нет никаких итераторов. Ошибка может быть малопонятной, но она будет. Можете считать это той самой идентификацией в компайл тайме.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2011, 15:39     необходимо в шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера
Еще ссылки по теме:

C++ Шаблонный конструктор в шаблонном классе
C++ Итератор контейнера set
C++ STL итератор на конец контейнера

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

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
18.12.2011, 15:39  [ТС]     необходимо в шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера #8
У меня внутри класса объявлен вектор:
C++
1
2
protected:
  vector<T, t_> vec;
И мне нужно чтобы это был обязательно вектор и надо чтобы T обязательно было именем вложенного типа, даже если тип, к примеру list <float>, вот одна из причин по которой я вынужден был отказаться от такого простого способа шаблонирования.
Yandex
Объявления
18.12.2011, 15:39     необходимо в шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера
Ответ Создать тему
Опции темы

Текущее время: 18:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru