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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Egor138
 Аватар для Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
05.11.2012, 14:07     Шаблонные классы #1
Помогите разобраться с шаблонными классами

C++
1
2
3
4
5
6
7
8
9
10
11
template <class Type>
class CL1 {
};
 
class CL2 {
};
 
 int main(void) { 
     CL1<void> s1;
     CL2 s2;
 }
Не могу понять зачем при создании объекта шаблонного класса надо писать тип CL1<void> s1; ???
Мы же не пишем его при объявлении объекта в обычном классе... Для чего это надо??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2012, 14:07     Шаблонные классы
Посмотрите здесь:

C++ Шаблонные функции
C++ Шаблонные функции и классы
Шаблонные классы. Присвоение к указателю и приведение типов C++
C++ Шаблонные функции
Шаблонные функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,891
Записей в блоге: 2
Завершенные тесты: 1
05.11.2012, 14:15     Шаблонные классы #2
Цитата Сообщение от Egor138 Посмотреть сообщение
Не могу понять зачем при создании объекта шаблонного класса надо писать тип CL1<void> s1;
В зависимости от того, какой тип Вы укажете, будет создан соответствующий класс. Для примера:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <stdlib.h>
using namespace std;
 
template<class T>
class CL1{
public:
    T x;
    T y;
};
 
int main()
{   setlocale(LC_ALL,"Russian");
    CL1<int> C1;
    CL1<double> C2;
    cout<<sizeof(C1)<<endl;
    cout<<sizeof(C2)<<endl;
    system("pause");
}
Здесь при CL1<int> C1; создается класс
C++
1
2
3
4
5
class честно_не_знаю_названия{
public:
    int x;
    int y;
};
а при CL1<double> C2;
C++
1
2
3
4
5
class честно_не_знаю_названия{
public:
    double x;
    double y;
};
Egor138
 Аватар для Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
05.11.2012, 14:22  [ТС]     Шаблонные классы #3
А если мне нужно чтобы создался вот такоей класс

C++
1
2
3
4
5
class честно_не_знаю_названия{
public:
    string x;
    double y;
};

Нужно писать template <class T1, class T2> ???
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
05.11.2012, 14:26     Шаблонные классы #4
Нужно читать книжку по синтаксису C++.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,891
Записей в блоге: 2
Завершенные тесты: 1
05.11.2012, 14:26     Шаблонные классы #5
Цитата Сообщение от Egor138 Посмотреть сообщение
Нужно писать template <class T1, class T2> ???
Да.
C++
1
2
3
4
5
template <class T1, class T2>
class XXX{
T1 x;
T2 y;
};
Egor138
 Аватар для Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
05.11.2012, 14:32  [ТС]     Шаблонные классы #6
А как мне создать вектор, хранящий объекты этого класса???

Такая запись уже не прокатит

C++
1
vector <CL1> vec;
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
05.11.2012, 14:38     Шаблонные классы #7
Цитата Сообщение от Egor138 Посмотреть сообщение
А как мне создать вектор, хранящий объекты этого класса???
C++
1
2
3
typedef CL1<int,string> CL;
    CL C1;
    vector<CL1<int,string>> vec;
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,891
Записей в блоге: 2
Завершенные тесты: 1
05.11.2012, 14:40     Шаблонные классы #8
Цитата Сообщение от Egor138 Посмотреть сообщение
А как мне создать вектор, хранящий объекты этого класса???
C++
1
vector<XXX<string,double>ТУТ_ПРОБЕЛ> F;
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
05.11.2012, 14:41     Шаблонные классы #9
>ТУТ_ПРОБЕЛ>
Не нужен там уже никакой пробел, C++11 отменяет это требование.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,891
Записей в блоге: 2
Завершенные тесты: 1
05.11.2012, 14:43     Шаблонные классы #10
Шаблонный класс генерируется в момент, когда происходит объявление переменной данного класса, то есть можно сделать и так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <stdlib.h>
using namespace std;
 
#define CL1(mytype) typedef class ClassMTR_##mytype {public: mytype x; mytype y;}
 
int main()
{   setlocale(LC_ALL,"Russian");
    CL1(int) C1;
    CL1(double) C2;
 
    cout<<sizeof(C1)<<endl;
    cout<<sizeof(C2)<<endl;
    system("pause");
}
Ну не совсем,конечно правильно, ибо два раза объявить не получится

Добавлено через 30 секунд
Цитата Сообщение от Герц Посмотреть сообщение
Не нужен там уже никакой пробел, C++11 отменяет это требование.
НЕ ВСЕ еще имеют компиляторы полностью поддерживающие C++11.
И если он у Вас есть, то это не значит, что есть у всех
Герц
05.11.2012, 15:14
  #11

Не по теме:

НЕ ВСЕ еще имеют компиляторы полностью поддерживающие C++11.
И если он у Вас есть, то это не значит, что есть у всех
Ага, и компиляторы, поддерживающие шаблоны, тоже не все имеют. Поэтому надо свой неполноценный велосипед на препроцессоре изобретать.

Croessmah
05.11.2012, 15:17
  #12

Не по теме:

Цитата Сообщение от Герц Посмотреть сообщение
Ага, и компиляторы, поддерживающие шаблоны, тоже не все имеют. Поэтому надо свой неполноценный велосипед на препроцессоре изобретать. С такими замашками тебе не на C писать надо.
Но если ТС задает тему с шаблонами, значит имеется соответствующий компилятор, а вот про С++11 тут ничего не сказано. А Вам следует писать с помощью стандарта С++23, на будущее сразу, как появится соответствующий компилятор - скомпилируете =)

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2012, 15:58     Шаблонные классы
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
OhMyGodSoLong
05.11.2012, 15:58     Шаблонные классы
  #13

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
А Вам следует писать с помощью стандарта С++23, на будущее сразу, как появится соответствующий компилятор - скомпилируете =)
Между С++23 и C++11 есть одно большое отличие: второй уже является текущим стандартом. Так что, если говорить строго, это теперь те, кто пользуется старыми компиляторами C++03, должны упоминать про необходимость совместимости со старой версией.

Yandex
Объявления
05.11.2012, 15:58     Шаблонные классы
Ответ Создать тему
Опции темы

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