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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
#1

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

18.12.2011, 04:21. Просмотров 938. Ответов 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;
}
Спасибо, кто откликнется
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2011, 04:21     В шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера
Посмотрите здесь:

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

STL итератор на конец контейнера - C++
Подскажите пожалуйста у меня задача сделать дерево и слизать интерфейс с STL std::map. Вопрос в следующем: когда мы обходим map итератором...

Не работает статическая функция в шаблонном классе - C++
Под windows все отлично работало, но под linux выдает ошибку : /home/stalker/Рабочий стол/H-Array/Homework_Array/Array.h:121: ошибка:...

Динамическое выделение памяти в шаблонном классе - C++
Здравствуйте! Подскажите пожалуйста как через new выделить память под массив: template &lt;class StkType&gt; class stack { ... StkType...

Переменная, содержащая тип, в шаблонном классе - C++
есть некий шаблонный класс. объект класса создается как-то так newtype&lt;int&gt; a; здесь int выступает в качестве типа, который...

Шаблонный оператор присваивания в шаблонном классе - C++
Почему, в таком коде, срабатывает оператор присваивания по умолчанию? template &lt;class T&gt; class A { T x; public: A(T...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yekka
385 / 149 / 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
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
18.12.2011, 11:19     В шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера #3
Вы пытаетесь сделать странную штуку. Нагородили класс с темплейтными параметрами, но чтобы его инстанцыровать приходится указывать как тип контейнера, так и тип элементов контейнера. Из-за необходимости указывать аллокаторы класс получился сложным, непереносимым и т.п.
Раз приходится указывать и контейнер и тип элементов, не проще ли написать шаблон с одним параметром и указывать ему сразу std::vector<int> или std::list<char> и т.п? Кажется это будет выглядеть проще и понятнее.
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
18.12.2011, 12:17  [ТС]     В шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера #4
Я не умею написать шаблон с одним параметром, имея ввиду что фактически параметром шаблона может быть, например:
C++
1
2
3
vector<int>    или
list    <int>    или
deque<float> или
Был бы благодарен, если бы кто-нибудь показал, как надо
DU
1482 / 1058 / 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
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
18.12.2011, 13:13  [ТС]     В шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера #6
Щас уже я не вспомню почему я прошёл мимо такого хорошего способа, придётся возвращаться в начало и всё по новой писать, но, сдаётся мне были какие-то причины на это. То ли мне нужна была идентификация как контейнера, так и его элементов, то ли что ещё.
DU
1482 / 1058 / 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++
Хотелось бы узнать, поддерживает ли это свойство Visual C++ 2010.

Итератор и его контейнер - C++
Должен ли итератор содержать в себе указатель на его контейнер? Ведь функции контейнера принимают итератор и работают с ним наверное думая...

Итератор контейнера внутреннего класса шаблона - C++
Следующий код компилируется: struct A { struct B {}; vector&lt;B&gt; vec; vector&lt;B&gt;::iterator it; }; А следующий код не...

Конструктор переноса при наследовании в шаблонном классе - C++
Здравствуйте. Возможно ли как-то реализовать то, что я пытаюсь сделать? template&lt;typename T&gt; class Interface { protected: T...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru