Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > «Шаблоны шаблонов» vs «шаблоны с параметрами-шабло


Автор: ДокторТуамОсес 8.10.2010, 20:12
«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами».
Есть ли разница в этих понятиях?

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

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

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



Код

#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 ;
}

__________________________________________________-

Автор: mes 8.10.2010, 21:14
Цитата(ДокторТуамОсес @  8.10.2010,  19:12 Найти цитируемый пост)
«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами».
Есть ли разница в этих понятиях?


имхо первое, все таки это вопрос для форума филологов.. 

имхо второе, в первом случае обозначает сущность, которая является прообразом для других сущностей 
во втором сущность которая строится на основе других сущностей..

имхо третье, тема провокационная..

Добавлено через 2 минуты и 39 секунд
только заметил -9 , думаю мое опасение не напрасно smile

Автор: ДокторТуамОсес 8.10.2010, 23:59
Цитата(mes @  8.10.2010,  21:14 Найти цитируемый пост)
имхо первое, все таки это вопрос для форума филологов.. 

Навеяло http://forum.academ.org/index.php?showtopic=313000 ссылкой и стандартом C++

Добавлено через 3 минуты и 5 секунд
Цитата(mes @  8.10.2010,  21:14 Найти цитируемый пост)
имхо второе, в первом случае обозначает сущность, которая является прообразом для других сущностей 
во втором сущность которая строится на основе других сущностей..

А не могли бы Вы то же самое сказать по русски?
А то я, пардон, отдельные слова понимаю, а общий смысл сказанного Вами, пардон, ускользает.

Автор: ДокторТуамОсес 17.12.2010, 02:22
Цитата(mes @  8.10.2010,  21:14 Найти цитируемый пост)
имхо первое, все таки это вопрос для форума филологов.. 


Приведу пример:

Код

template <class T> class X { /*  ...  */} ;
template <class Y, class Z, template <class T> class W = X> class P
{
    W<Y> var1 ;
    W<Z> var2 ;
    ...
}


Чем является конструкция template <class T> class W ?
Назвать шаблоном её нельзя, поскольку это не конкретный шаблон,
а описание формата шаблона, который должен быть передан в качестве параметра.
Т.е. фактически шаблон шаблонов

Автор: mes 17.12.2010, 09:45
Цитата(ДокторТуамОсес @  17.12.2010,  01:22 Найти цитируемый пост)
Т.е. фактически шаблон шаблонов 

если с точки зрения самого шаблона:   шаблонный аргумент шаблона.. 
а то что будет передаваться туда будет : шаблонный параметр шаблона...

Автор: boostcoder 17.12.2010, 09:53
Цитата(mes @  17.12.2010,  09:45 Найти цитируемый пост)
шаблонный аргумент шаблона.. 

Цитата(mes @  17.12.2010,  09:45 Найти цитируемый пост)
шаблонный параметр шаблона...

никогда их не различал не видя кода. ассоциации непонятные в моцгу smile 

Автор: mes 17.12.2010, 10:06
Цитата(boostcoder @  17.12.2010,  08:53 Найти цитируемый пост)
никогда их не различал не видя кода.

параметр это то что передается, а аргумент,то что получает функция.. 
они могу различаться как типом, так и значением ввиду возможных преобразований..
(это я не про шаблонный, а в общем)

Автор: boostcoder 17.12.2010, 10:11
постараюсь запомнить... но сомневаюсь что получится. пробовал раньше smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)