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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.66
Доктор ТуамОсес
Заблокирован
#1

«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». - C++

09.10.2010, 00:15. Просмотров 4990. Ответов 2
Метки нет (Все метки)

«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами».
Есть ли разница в этих понятиях?

Если есть, то в чём?

И где (в каких конструкциях) можно использовать шаблон с параметром-шаблоном или шаблон шаблонов?
И какую выгоду получает программист от использования «шаблонов шаблонов»/«шаблонов с параметрами-шаблонами» по сравнению с прочими средствами C++?

Я пока только знаю единственное (из стандарта на C++ ISO/IEC 14882 Second edition 2003-10-15) про такое использование шаблона с параметром шаблоном:



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
32
33
#include <iostream>
using std::cout ;
using std::cin ;
using std::endl ;
 
template < class T > class A {
    public :
    short x ;
} ;
 
// Специализация шаблона A
template < class T > class A < T* > {
    public :
    long x ;
} ;
 
// Шаблон класса с параметром-шаблоном, имеющим вариант
// со специализацией.
template < template < class U > class V > class C {
    public :
    V < int  >  y ;
    V < int* >  z ;
} ;
 
C < A > c ;
 
int main (void) {
    cout << sizeof ( c.y.x ) << endl ; // 2
    cout << sizeof ( c.z.x ) << endl ; // 4
    char c ;
    cin >> c ;
    return 0 ;
}
__________________________________________________-

Добавлено через 3 часа 9 минут
Чо молчим?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2010, 00:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос «Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». (C++):

Шаблоны template с ограниченными параметрами - C++
Привет всем. У меня короткий вопрос. например есть такой код: template &lt;class T&gt; class MyVec { std::vector&lt;T&gt; m_vec; }; ...

Шаблоны. Плохо понимаемые моменты из книги "Шаблоны С++. Справочник разработчика". (Вандевурд, Джосаттис) - C++
Так как изучаю эту книгу, то в некоторых местах возникают вопросы. Чтобы не плодить много тем, корни у которых одни, решил создать эту...

Помогите писать на С++ через шаблоны. Консуле я писал, но надо писать исползуя шаблоны - C++
В одномерном массиве, состоящем из п вещественных элементов, вычислить: 1) количество элементов массива, равных 0; 2) сумму элементов...

Прблемы с Шаблонами: Конструктор с параметрами, объявление итератора. - C++
Добрый день. Начал изучать шаблоны и сразу же возникло 2 проблемы: 1).На Строке в мейне SArr&lt;short&gt; ar1(100); Выдается ошибка...

шаблоны в си++ - C++
кто может сказать где прблема? List.h #ifndef LIST_H #define LIST_H #include&lt;iostream&gt; #include&lt;ostream&gt; ...

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

2
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
09.10.2010, 12:44 #2
Понятие "шаблон шаблонов" мне незнакомо. Шаблоны в С++ могут иметь в качестве параметра целочисленную константу времени компиляции, конкретный тип (в том числе и инстанциацию шаблона) и шаблон (у буржуев такое модно называть template template parameters). Шаблон A, принимающий в качестве параметра шаблон B, обычно делает это затем, чтобы так или иначе инстанциировать B. Например, создавая какой-то шаблон, занимающийся работой с набором данных, мы можем указывать ему, в каком контейнере он должен хранить данные: динамический массив, список или что-то другое.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template <typename Data, template<typename T> class Container>
class MyDataProcessor {
public:
// ...
private:
    Container<Data> myData;
};
 
// Стандартные контейнеры имеют дополнительный параметр шаблона - аллокатор.
// А в MyDataProcessor нужен контейнер с одним параметром.
template<typename T> class StdVector: public std::vector<T> {};
template<typename T> class StdList: public std::list<T> {};
 
// Создадим обработчик данных на основе списка для int и на основе вектора для float
MyDataProcessor<int, StdList> intProcessor;
MyDataProcessor<float, StdVector> floatProcessor;
1
Доктор ТуамОсес
Заблокирован
17.12.2010, 01:40  [ТС] #3
Цитата Сообщение от Nick Alte Посмотреть сообщение
у буржуев такое модно называть template template parameters
Дык это и есть как раз "шаблон шаблонов"
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2010, 01:40
Привет! Вот еще темы с ответами:

Шаблоны - C++
ругается на строку &quot;friend class List&lt;T&gt;;&quot;, вот что пишет: 1&gt;c:\users\slava\documents\visual studio...

Шаблоны - C++
Добрый день. Не могли бы объяснить вот этот вопрос: Допускают ли шаблоны вложенность описания?

Шаблоны - C++
#include &lt;iostream&gt; using namespace std; template &lt;class T&gt; class Vector{ int size; int capacity; T* data; ...

Шаблоны - C++
Здравствуйте, подскажите пожалуйста почему компилятор мне пишет, что print(b);не соответствующая функция для вызова. #include &lt;iostream&gt; ...


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

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

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