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

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

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

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

18.12.2011, 04:21. Просмотров 956. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2011, 04:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В шаблонном классе, один из параметров которого контейнер, объявить итератор этого контейнера (C++):

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

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

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

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

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

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

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

typedef в шаблонном классе фыв - C++
Есть некий шаблонный класс с typedef'ом, и функция которая возвращает тип описанный typedef: ... template&lt;class T&gt; class Blablabla...

Найти ошибки в шаблонном классе - C++
Пишу шаблонный класс в Qt, и, конечно же, на моих любимых шаблонах не обошлось без проблем :(. Структура кода стандартная - *.h + *.cpp. В...

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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