Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
8 / 8 / 2
Регистрация: 14.01.2013
Сообщений: 141
1

Зачем нужен шаблон как параметр шаблона?

25.04.2013, 15:38. Просмотров 1035. Ответов 5
Метки нет (Все метки)

Видел много примеров, но что-то не особо понятно зачем и как это работает.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.04.2013, 15:38
Ответы с готовыми решениями:

Шаблон параметр шаблона и наследование
Есть вот такой базовый класс, который описывает абстрактный доступ к контейнеру stl: template<...

Почему шаблонный параметр-шаблон не принимает другие параметры шаблона
Т.е. нельзя вместо template <typename T, template <typename _Ty, class _Aloc = allocator<_Ty> >...

зачем нужен параметр
#include"otobrazenie.h" #include "primary.h" #include <iostream> #include "execution.h"...

Шаблоннный клас как параметр шаблона
Если в кратце: Имеется такой код: typedef ByteStuffing<USART0, CRC8<USART0> > StreamDelimiter;...

5
Каратель
Эксперт С++
6593 / 4014 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.04.2013, 16:57 2
Цитата Сообщение от mzarb Посмотреть сообщение
но что-то не особо понятно зачем
Чтобы передавать шаблоны в качестве параметров, но при этом не указывать параметры этих шаблонов, другими словами - обязать параметры шаблона быть шаблонами, но при этом не указывать параметры параметров шаблона
В качестве примера - шаблон класса, параметром которого может может быть только шаблон принимающий два параметра.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <vector>
#include <deque>
#include <list>
 
template<template<class T, class A = std::allocator<T> > class Cont>
class MyClass
{
    Cont<int> mCont;
};
 
template<class T, class R>
class TestClass
{
};
 
int main()
{
    MyClass<std::vector> obj_vec;
    MyClass<std::list> obj_list;
    MyClass<std::deque> obj_deque;
    MyClass<TestClass> obj_test;
}
Как видишь в main задается лишь контейнер, тогда как тип элемента контейнера задаем внутри, хотя если нам это потребуется то мы можем сделать так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <vector>
#include <deque>
#include <list>
 
template<class T, template<class, class A = std::allocator<T> > class Cont>
class MyClass
{
    Cont<T> mCont;
};
 
template<class T, class R>
class TestClass
{
};
 
int main()
{
    MyClass<int, std::vector> obj_vec;
    MyClass<int, std::list> obj_list;
    MyClass<int, std::deque> obj_deque;
    MyClass<int, TestClass> obj_test;
}
1
8 / 8 / 2
Регистрация: 14.01.2013
Сообщений: 141
02.05.2013, 16:43  [ТС] 3
Jupiter, так а за что цепляется к примеру vector, когда его передать этим кодом "MyClass<int, std::vector> obj_vec;"? Так-то понятно, что его примет этот код "template<class T, class A = std::allocator<T> > class Cont" и Cont будет как аллиас вектора, но какая именно часть этого кода примет вектор? Ведь он же должен за что-то зацепится. Вообщем это аналог указателя на функцию?
0
Каратель
Эксперт С++
6593 / 4014 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
02.05.2013, 16:47 4
что значит зацепится?
Цитата Сообщение от mzarb Посмотреть сообщение
Вообщем это аналог указателя на функцию?
вообще другое
1
8 / 8 / 2
Регистрация: 14.01.2013
Сообщений: 141
02.05.2013, 16:56  [ТС] 5
Ну вот передал аргументом вектор и его принял шаблонный параметр шаблона, но куда он его дел? Ведь эта часть "class T, class A = std::allocator<T> " параметры вектора, а где делся сам вектор, кто его принял? То есть Cont будет указывать на реализацию вектора?
0
Каратель
Эксперт С++
6593 / 4014 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
02.05.2013, 17:00 6
Цитата Сообщение от mzarb Посмотреть сообщение
То есть Cont будет указывать на реализацию вектора?
да.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2013, 17:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Свой тип как параметр шаблона
Есть вопрос по коду: #include &lt;iostream&gt; #include &lt;memory&gt; #include &lt;vector&gt; using namespace...

Передача функции как параметр шаблона
Хочу передавать в шаблон любую функцию без параметров и вызывать ее из него. Как это сделать? ...

Передать шаблонный класс, как параметр шаблона
нужно не используя stl написать аналог класса list. написал болванку и застрял template&lt;class C&gt;...

Как можно изменить параметр шаблона (template)?
есть такие классы: class abstract { public: virtual int method() = 0; // Допустим }; class...


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

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

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