С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
Programmer.
Прогер
631 / 262 / 7
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
#1

Можете обяснить зачем использовать template<> - C++

06.03.2012, 06:15. Просмотров 1932. Ответов 7
Метки нет (Все метки)

Привет всем... у меня такой вопрос:

Что такое template я уже как то понял, но...

Зачем и в какых ситуациях исползовать template<> ?

Спасибо заранее...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2012, 06:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Можете обяснить зачем использовать template<> (C++):

Ошибки: 1) use of class template requires template argument list 2) 'T' : undeclared identifier - C++
Решил подправить свой класс с использованием шаблонов, но столкнулся со следующим косяком. Если я прописываю тело функций внутри описания...

Зачем использовать динамическую память? - C++
Прошу в двух словах разъяснить зачем используют динамическую память на практике. Заранее всем добрым людям спс!

'MyQueue' : use of class template requires template argument list - C++
Написал код про шаблоны. Не могу понять почему выводит ошибку во время наследования класса. ошибки 'MyQueue' : use of class template...

В чем различие template <typename T> от template <class T> ? - C++
Добрый день ! Заметил в новых книгах применение записи template &lt;typename T&gt; вместо template &lt;class T&gt; в чем же тогда фишка...

Ошибка компиляции: template-id does not match any template declaration - C++
Здравствуйте. Помогите, пожалуйста: #include &lt;iostream&gt; using namespace std; template &lt;typename T&gt; T maxn(T*, const int*); ...

Visual Studio выдаёт ошибку при вынесении объявления функции с template в .h файл. Без template всё работает - C++
Проект содержит три файла: Source.cpp, arrTreat.h, arrTreat.cpp. Source.cpp: #include &lt;iostream&gt; using std::cout; using...

7
gumi250
430 / 397 / 35
Регистрация: 06.02.2012
Сообщений: 1,373
06.03.2012, 06:37 #2
Чтобы не переписывать одну и туже ф-цию(класс) для всех возможных типов. Например без шаблонов будет так
C++
1
2
3
4
5
6
7
8
9
int Sum(int a, int b)
{ return a+b;
};
long Sum(long a, long b)
{ return a+b;
};
double Sum(double a, double b)
{ return a+b;
};
Здесь фактически одно и тоже вы делаете дважды, трижды, четырежды и т.д для всех возможных типов, и все равно все типы не перепишите.
А с шаблонами для все типов сразу.
C++
1
2
3
template<class T> T Sum(T a, T b)
{ return a+b;
}
1
Programmer.
Прогер
631 / 262 / 7
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
06.03.2012, 09:56  [ТС] #3
gumi250,
Спасибо огромное, а с классамы как он работает?
0
gumi250
430 / 397 / 35
Регистрация: 06.02.2012
Сообщений: 1,373
06.03.2012, 10:06 #4
А примерно также например, без шаблонов:
C++
1
2
3
4
5
6
7
8
class TPointInt
{ int x,y;
  Set(int x_, int y_);
}
class TPointFloat
{ float x,y;
  Set(float x_, float y_);
}
А с шаблонами:
C++
1
2
3
4
template <class T> class MPoint
{ T x,y;
  Set(T x_, T y_);
}
1
Programmer.
Прогер
631 / 262 / 7
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
06.03.2012, 10:23  [ТС] #5
gumi250,
Спасибо, а для чего на пример делаетса так:
C++
1
template <class T, int S, double J>
И как после обявление их, описать конструктор и деструктор?
И для чего привести столко переменных, если можно обявыть все в например
C++
1
template<typename T>
0
vxg
Модератор
3188 / 1991 / 228
Регистрация: 13.01.2012
Сообщений: 7,712
06.03.2012, 13:13 #6
Цитата Сообщение от Programmer. Посмотреть сообщение
И как после обявление их, описать конструктор и деструктор?
так
C++
1
2
3
4
5
6
7
8
template <class type>
class some_class
{
public:
    type data;
    some_class(type x): data(x) {}
    virtual ~some_class(void) {}
};
Цитата Сообщение от Programmer. Посмотреть сообщение
И для чего привести столко переменных, если можно обявыть все в например
нельзя, в первом случае у вас три параметра шаблона, а во втором - только один и весь добавочный функционал вам нужно будет реализовывать какими-то иными отличными от шаблона способами
1
gumi250
430 / 397 / 35
Регистрация: 06.02.2012
Сообщений: 1,373
06.03.2012, 16:45 #7
Цитата Сообщение от Programmer. Посмотреть сообщение
gumi250,
Спасибо, а для чего на пример делаетса так:
C++
1
template <class T, int S, double J>
Никогда не пользовался этим, но если я не ошибаюсь, то через параметры шаблона можно передавать константы, могу ошибится в коде, но как то так:
C++
1
2
3
template <class T, int S> ckass TA
{ T A[S];
}
1
Programmer.
Прогер
631 / 262 / 7
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
06.03.2012, 21:37  [ТС] #8
gumi250,
vxg,
Понял, спасибо...
0
06.03.2012, 21:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2012, 21:37
Привет! Вот еще темы с ответами:

Зачем использовать чисто сишные средства в C++ коде? - C++
Не могу воспринимать в коде на си++ принтфы, и все же часто встречаю в примерах. Это принтф головного мозга? В них есть какое-то...

Зачем нужно использовать инициализаторы элемент-данных класса? - C++
Имеется фрагмент кода. Если быть точным, то описание класса. #include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;Windows.h&gt; using...

Зачем учить указатели, если можно использовать вектор? - C++
Не могу понять, зачем учить указатели если в большинстве случаев для выделения памяти намного легче использовать vector?

Для чего нужны и зачем использовать smart-указатели? - C++
В Страуструпе не нашел, кто подскжает где можно про них прочитать ?)


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

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

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