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

Шаблонные классы - C++

Восстановить пароль Регистрация
 
maria_
5 / 5 / 1
Регистрация: 25.08.2013
Сообщений: 67
06.04.2014, 20:14     Шаблонные классы #1
Добрый день! Вопрос такой: есть класс
C++
1
2
3
4
5
6
class A
{
public:
    int x;
    A* z;
}
Мне нужно сделать его шаблонным, а именно, чтобы тип поля z был шаблонным, т.е. так:
C++
1
2
3
4
5
6
7
template<class T>
class A
{
public:
    int x;
    T* z;
}
И я хочу потом сделать, допустим, список из объектов типа A. Элемент списка объявлять значит надо так:
C++
1
A<A> elem;
Но тогда получается, что тот класс A, который записан внутри скобок, не имеет параметра, т.е. надо писать как-то так:
C++
1
A<A<A<A<...> > > > elem;
Но нельзя же писать до бесконечности. Как можно в этом случае объявить переменную elem?

Добавлено через 29 минут
Может можно написать что-то похожее на
C++
1
2
3
4
5
6
7
template<class T>
class A
{
public:
    int x;
    T<T>* z;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,993
06.04.2014, 20:26     Шаблонные классы #2
Цитата Сообщение от maria_ Посмотреть сообщение
A<A> elem;
разве? а не A<T> ?
при виде A<A> у меня мозг вскипел мб я чего-то не понимаю
maria_
5 / 5 / 1
Регистрация: 25.08.2013
Сообщений: 67
06.04.2014, 20:30  [ТС]     Шаблонные классы #3
При создании экземпляра класса надо ведь в скобках уже что-то конкретное писать, а не T.

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template<class T>
class A
{
public:
    int x;
    T* z;
}
 
int main()
{
    A<A> elem; //вот здесь нельзя ведь A<T> elem написать
    return 0;
}
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,993
06.04.2014, 20:31     Шаблонные классы #4
Цитата Сообщение от maria_ Посмотреть сообщение
При создании экземпляра класса надо ведь в скобках уже что-то конкретное писать, а не T.
логично, но не сам же класс....

у вас T* z для чего нужен?
maria_
5 / 5 / 1
Регистрация: 25.08.2013
Сообщений: 67
06.04.2014, 20:36  [ТС]     Шаблонные классы #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template<class T>
class A
{
public:
    int x;
    T* z;
}
 
class B
{
    int x;
}
 
int main()
{
    A<B> elem; //другой же класс в скобках можно писать, а как сделать, чтоб можно было написать тот же
    return 0;
}
Добавлено через 3 минуты
Поле A* z нужно, чтобы иметь из объекта класса указатель на другой объект того же класса. Но для общности, если понадобится указатель на объект другого класса нужен шаблон Т.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,993
06.04.2014, 20:37     Шаблонные классы #6
масло масленое...
в любом случае вам придётся как-то ограничить ваш А<A<A...>> , иначе будет бесконечность,
тоже самое что vector <vector<int> >
maria_
5 / 5 / 1
Регистрация: 25.08.2013
Сообщений: 67
06.04.2014, 20:39  [ТС]     Шаблонные классы #7
В том и вопрос, как это ограничить, если заранее неизвестна длина этой цепочки
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,993
06.04.2014, 20:43     Шаблонные классы #8
Цитата Сообщение от maria_ Посмотреть сообщение
В том и вопрос, как это ограничить, если заранее неизвестна длина этой цепочки
вообще имхо подход неверный...хотя задачи не знаю)
zss
Модератор
Эксперт С++
 Аватар для zss
6046 / 5649 / 1825
Регистрация: 18.12.2011
Сообщений: 14,431
Завершенные тесты: 1
06.04.2014, 20:44     Шаблонные классы #9
что-то вы зарапортовались.
Все гораздо проще
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<class T>
class A
{
public:
    T x;
    A<T>* next;
};
int main()
{
    A<int> k;
    k.x=0;
    k.next=0;
    return 0;
}
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,993
06.04.2014, 20:51     Шаблонные классы #10
Цитата Сообщение от zss Посмотреть сообщение
что-то вы зарапортовались.
Все гораздо проще
ТС хочет сделать какую-то мегавещь, чтобы в списке был не только A<T> , но и скажем B<T> и т.п.
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
06.04.2014, 23:44     Шаблонные классы #11
Цитата Сообщение от dzrkot Посмотреть сообщение
чтобы в списке был не только A<T> , но и скажем B<T>
Ну, если у них будет общий базовый класс, то почему бы и нет...
maria_, как задача поставлена изначально, что нужно сделать и зачем?
maria_
5 / 5 / 1
Регистрация: 25.08.2013
Сообщений: 67
07.04.2014, 11:01  [ТС]     Шаблонные классы #12
Задача такая: есть структура данных - какой-то класс. В нём должно быть шаблонное поле, которое при создании объекта класса можно сделать указателем на объект того же класса. Причём у того объекта, на который указывают, данное поле должно быть того же типа (т.е. указатель на объект этого класса). Зачем это нужно - для общности.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2014, 11:41     Шаблонные классы
Еще ссылки по теме:

C++ Шаблонные структуры
C++ Шаблонные классы
C++ Шаблонные дружественные классы
C++ Шаблонные функции
C++ Шаблонные классы

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.04.2014, 11:41     Шаблонные классы #13
maria_, так разве этого не достаточно?
C++
1
2
3
4
5
template <class T>
struct S
{
   S<T>* ptr;
};
Yandex
Объявления
07.04.2014, 11:41     Шаблонные классы
Ответ Создать тему
Опции темы

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