шаблонный параметр шаблона
От: enots  
Дата: 14.03.06 14:25
Оценка:
template< template<class T> void(*)(int),  class T1 = vector<T> >
class Test2
{
   typename T1::iterator it;
};


Что то MSVS7.1 не кушает это ...
Re: шаблонный параметр шаблона
От: rg45 СССР  
Дата: 14.03.06 14:32
Оценка: 1 (1)
"enots" <19635@users.rsdn.ru> wrote in message news:1782026@news.rsdn.ru...
>
>
> template< template<class T> void(*)(int),  class T1 = vector<T> >
> class Test2
> {
>    typename T1::iterator it;
> };
>

>
> Что то MSVS7.1 не кушает это ...

14.3.3 Template template arguments

1 A templateargument

for a template templateparameter

shall be the name of a class template, expressed as

idexpression.

Only primary class templates are considered when matching the template template argument

with the corresponding parameter; partial specializations are not considered even if their parameter lists

match that of the template template parameter.


Другими словами, шаблонным параметром шаблона может быть только шаблон класса или структуры
Posted via RSDN NNTP Server 1.9
--
Справедливость выше закона. А человечность выше справедливости.
Re[2]: шаблонный параметр шаблона
От: enots  
Дата: 15.03.06 09:12
Оценка:
R>Другими словами, шаблонным параметром шаблона может быть только шаблон класса или структуры

однако

template< template<class T> struct R,  class T1 = vector<T> >
class Test2
{
   typename T1::iterator it;
};


это все равно не проходит, но случай с class все идет хорошо

template< template<class T> class R,  class T1 = vector<T> >
class Test2
{
   typename T1::iterator it;
};
Re[3]: шаблонный параметр шаблона
От: night beast СССР  
Дата: 15.03.06 09:23
Оценка:
Здравствуйте, enots, Вы писали:

R>>Другими словами, шаблонным параметром шаблона может быть только шаблон класса или структуры


E>однако


E>
E>template< template<class T> struct R,  class T1 = vector<T> >
E>class Test2
E>{
E>   typename T1::iterator it;
E>};
E>


E>это все равно не проходит, но случай с class все идет хорошо


что конкретно идет, и как предполагается использовать эту затейливую конструкцию?

E>
E>template< template<class T> class R,  class T1 = vector<T> >
E>class Test2
E>{
E>   typename T1::iterator it;
E>};
E>


а откомпилировать не пробовал?
Re[4]: шаблонный параметр шаблона
От: enots  
Дата: 15.03.06 09:25
Оценка:
Здравствуйте, night beast, Вы писали:

NB>Здравствуйте, enots, Вы писали:




NB>что конкретно идет, и как предполагается использовать эту затейливую конструкцию?


E>>
E>>template< template<class T> class R,  class T1 = vector<T> >
E>>class Test2
E>>{
E>>   typename T1::iterator it;
E>>};
E>>


NB>а откомпилировать не пробовал?


а ты думаешь я не проверив сюда пишу?
Re[5]: шаблонный параметр шаблона
От: night beast СССР  
Дата: 15.03.06 09:30
Оценка:
Здравствуйте, enots, Вы писали:

E>Здравствуйте, night beast, Вы писали:


NB>>Здравствуйте, enots, Вы писали:




NB>>что конкретно идет, и как предполагается использовать эту затейливую конструкцию?


E>>>
E>>>template< template<class T> class R,  class T1 = vector<T> >
E>>>class Test2
E>>>{
E>>>   typename T1::iterator it;
E>>>};
E>>>


NB>>а откомпилировать не пробовал?


E>а ты думаешь я не проверив сюда пишу?


была такая мысль
можно посмотреть компилируемый пример?
Re[3]: шаблонный параметр шаблона
От: _DAle_ Беларусь  
Дата: 15.03.06 09:39
Оценка:
Здравствуйте, enots, Вы писали:

R>>Другими словами, шаблонным параметром шаблона может быть только шаблон класса или структуры


E>однако


E>
E>template< template<class T> struct R,  class T1 = vector<T> >
E>class Test2
E>{
E>   typename T1::iterator it;
E>};
E>


E>это все равно не проходит, но случай с class все идет хорошо


Потому что у template template parameters синтаксис именно со словом class.

14.1/1

template-parameter:
type-parameter
parameter-declaration

type-parameter:
class identifieropt
class identifieropt = type-id
typename identifieropt
typename identifieropt = type-id
template < template-parameter-list > class identifieropt
template < template-parameter-list > class identifieropt = id-expression

... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Re[4]: шаблонный параметр шаблона
От: rg45 СССР  
Дата: 15.03.06 09:40
Оценка:
"night beast" <48023@users.rsdn.ru> wrote in message news:1783507@news.rsdn.ru...
> Здравствуйте, enots, Вы писали:
>
> E>
> E>template< template<class T> class R,  class T1 = vector<[b]T[b]> >
> E>class Test2
> E>{
> E>   typename T1::iterator it;
> E>};
> E>


> E>... но случай с class все идет хорошо


template< template<class T> struct R,  class T1 = vector<T> >

Использовать struct при спецификации шаблонного параметра шаблона нельзя, только class, даже в том случае, если инстанцироваться этот шаблон будет шаблоном структуры а не класса.

Идентификатор T в шаблонно параметре не несет никакой нагрузки, его можно не писать, его все равно что нет. А вот при использовании vector<T> будет ошибка, т.к. T нигде не объявлено.

template< template<typename> class R,  class T1 = vector<[b]???[b]> >
class Test2
{
   typename T1::iterator it;
};


Как это могло работать, остается загадкой.
Posted via RSDN NNTP Server 1.9
--
Справедливость выше закона. А человечность выше справедливости.
Re[6]: шаблонный параметр шаблона
От: enots  
Дата: 15.03.06 10:05
Оценка:
Здравствуйте, night beast, Вы писали:
NB>была такая мысль
NB>можно посмотреть компилируемый пример?

Он то компилится если объект не создавать
а вот пример из книги Джоасаттиса Шаблоны С++ который тоже не компилится


template <typename T,
            template <typename ELEM,
                typename ALLOC = std::allocator<ELEM> >
                class CONT =std::deque>
class Stack
{
private:
    CONT<T> elems;
};

int main( int argc, char ** argv )
{
  Stack <int, std::vector> vStack;
  Stack <int> intStack;

}
Re[5]: шаблонный параметр шаблона
От: enots  
Дата: 15.03.06 10:13
Оценка:
Здравствуйте, rg45, Вы писали:


R>
R>template< template<class T> struct R,  class T1 = vector<T> >
R>

R>Использовать struct при спецификации шаблонного параметра шаблона нельзя, только class, даже в том случае, если инстанцироваться этот шаблон будет шаблоном структуры а не класса.

R>Идентификатор T в шаблонно параметре не несет никакой нагрузки, его можно не писать, его все равно что нет. А вот при использовании vector<T> будет ошибка, т.к. T нигде не объявлено.


R>
R>template< template<typename> class R,  class T1 = vector<[b]???[b]> >
R>class Test2
R>{
R>   typename T1::iterator it;
R>};
R>


R>Как это могло работать, остается загадкой.


а если так?


template<class T, void(*)(T) >
class Test2
{
};

void ttt(int)
{
}
int main( int argc, char ** argv )
{
  Test2<int , ttt> t;
  /*Test2<double , ttt> t;*/ //ошибка
  return 0;
}

как видно из примера первый шаблонный параметр может быть параметром во втором параметре тоже
Re[7]: шаблонный параметр шаблона
От: night beast СССР  
Дата: 15.03.06 10:17
Оценка:
Здравствуйте, enots, Вы писали:

E>Здравствуйте, night beast, Вы писали:

NB>>была такая мысль
NB>>можно посмотреть компилируемый пример?

E>Он то компилится если объект не создавать


я тебя не понимаю, какой объект
см. ответ rg45, объясняющий почему не компилится.

E>а вот пример из книги Джоасаттиса Шаблоны С++ который тоже не компилится


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

E>
E>template <typename T,
E>            template <typename ELEM,
E>                typename ALLOC = std::allocator<ELEM> >
E>                class CONT =std::deque>
E>class Stack
E>{
E>private:
E>    CONT<T> elems;
E>};

E>int main( int argc, char ** argv )
E>{
E>  Stack <int, std::vector> vStack;
E>  Stack <int> intStack;

E>}
E>
Re[8]: шаблонный параметр шаблона
От: enots  
Дата: 15.03.06 10:23
Оценка:
Здравствуйте, night beast, Вы писали:

NB>Здравствуйте, enots, Вы писали:


E>>Здравствуйте, night beast, Вы писали:

NB>>>была такая мысль
NB>>>можно посмотреть компилируемый пример?

E>>Он то компилится если объект не создавать


NB>я тебя не понимаю, какой объект

NB>см. ответ rg45, объясняющий почему не компилится.

что то я не увидел объяснения ... по поводу не использования struct цитата от _DAle_ из стандарта — это я понял.

> какой объект

объект класса шаблона

E>>а вот пример из книги Джоасаттиса Шаблоны С++ который тоже не компилится


NB>здесь другой случай: на сколько я знаю, нельзя использовать стандартные контейнеры как шаблонные шаблонные параметры. у них (контейнеров) может измениться сигнатура.

NB>пусть меня поправят, если ошибаюсь.

да это для меня тоже не ясно пока ...
Re[6]: шаблонный параметр шаблона
От: rg45 СССР  
Дата: 15.03.06 10:32
Оценка:
"enots" <19635@users.rsdn.ru> wrote in message news:1783692@news.rsdn.ru...
> R>
> R>template< template<typename> class R,  class T1 = vector<[b]???[b]> >
> R>class Test2
> R>{
> R>   typename T1::iterator it;
> R>};
> R>

>
> R>Как это могло работать, остается загадкой.
>
> а если так?
>
>
> 
> template<class T, void(*)(T) >
> class Test2
> {
> };
> 
>

> как видно из примера первый шаблонный параметр может быть параметром во втором параметре тоже

Если так, то это совсем другое дело.

Вот пример, показывающий, как можно использовать шаблонные параметры шаблона.

template<typename T, template<typename, typename> class BasicContainer = std::vector>
class Container : BasicContainer<T, std::allocator<T> >
{
};
int main()
{
    Container<int>                             int_vector;
    Container<std::string, std::list>      names_list;
    Container<float, std::deque>        float_deque;
}
Posted via RSDN NNTP Server 1.9
--
Справедливость выше закона. А человечность выше справедливости.
Re[9]: шаблонный параметр шаблона
От: night beast СССР  
Дата: 15.03.06 10:36
Оценка:
Здравствуйте, enots, Вы писали:

E>Здравствуйте, night beast, Вы писали:


NB>>Здравствуйте, enots, Вы писали:


E>>>Здравствуйте, night beast, Вы писали:

NB>>>>была такая мысль
NB>>>>можно посмотреть компилируемый пример?

E>>>Он то компилится если объект не создавать


NB>>я тебя не понимаю, какой объект

NB>>см. ответ rg45, объясняющий почему не компилится.

E>что то я не увидел объяснения ... по поводу не использования struct цитата от _DAle_ из стандарта — это я понял.


объясняю

E>>>template< template<class T> class R,  class T1 = vector<T> > 
class Test {
   typedef T1 type;
};

использовать T вне class R нельзя.
потому, что

template<class T> Second {};
Test<Second> x; // какой тип имеет Test::type


то есть
template< template<class T, class S=T /*можно*/> class R,  class T1 = vector<T /*нельзя*/> >


зато ты можешь использовать R
template< template<class T> class R,  class T1 = R<int> >


>> какой объект

E>объект класса шаблона

и без объекта не должен компилироваться.
Re[7]: шаблонный параметр шаблона
От: enots  
Дата: 15.03.06 11:19
Оценка:
Здравствуйте, rg45, Вы писали:


R>Если так, то это совсем другое дело.


R>Вот пример, показывающий, как можно использовать шаблонные параметры шаблона.


R>
R>template<typename T, template<typename, typename> class BasicContainer = std::vector>
R>class Container : BasicContainer<T, std::allocator<T> >
R>{
R>};
R>int main()
R>{
R>    Container<int>                             int_vector;
R>    Container<std::string, std::list>      names_list;
R>    Container<float, std::deque>        float_deque;
R>}
R>


можно источник?
Re[8]: шаблонный параметр шаблона
От: rg45 СССР  
Дата: 15.03.06 11:23
Оценка:
"enots" <19635@users.rsdn.ru> wrote in message news:1783919@news.rsdn.ru...
> Здравствуйте, rg45, Вы писали:
>
>
> R>Если так, то это совсем другое дело.
>
> R>Вот пример, показывающий, как можно использовать шаблонные параметры шаблона.
>
> R>
> R>template<typename T, template<typename, typename> class BasicContainer = std::vector>
> R>class Container : BasicContainer<T, std::allocator<T> >
> R>{
> R>};
> R>int main()
> R>{
> R>    Container<int>                             int_vector;
> R>    Container<std::string, std::list>      names_list;
> R>    Container<float, std::deque>        float_deque;
> R>}
> R>

>
> можно источник?

Ну вообще то из головы писал, что первое на ум пришло
Posted via RSDN NNTP Server 1.9
--
Справедливость выше закона. А человечность выше справедливости.
Re[9]: шаблонный параметр шаблона
От: enots  
Дата: 15.03.06 11:27
Оценка:
Здравствуйте, rg45, Вы писали:


>>

>> можно источник?

R>Ну вообще то из головы писал, что первое на ум пришло


Тогда книженцию по которой шаблончики изучали (только не гворите что много книг изучал и поэтому не скажу ни одной )
Re[10]: шаблонный параметр шаблона
От: rg45 СССР  
Дата: 15.03.06 11:34
Оценка:
"enots" <19635@users.rsdn.ru> wrote in message news:1783947@news.rsdn.ru...
> Здравствуйте, rg45, Вы писали:
> Тогда книженцию по которой шаблончики изучали (только не гворите что много книг изучал и поэтому не скажу ни одной )

Рекомендую это:
Александреску
Автор(ы): Андрей Александреску

В книге изложена новая технология программирования, представляющая собой сплав обобщенного программирования, метапрограммирования шаблонов и объектно- ориентированного программирования на С++. Настраиваемые компоненты, созданные автором, высоко подняли уровень абстракции, наделив язык С++ чертами языка спецификации проектирования, сохранив всю его мощь и выразительность. В книге изложены способы реализации основных шаблонов проектирования. Разработанные компоненты воплощены в библиотеке Loki, которую можно загрузить с Web-страницы автора. Книга предназначена для опытных программистов на С++.

Страуструп
Автор(ы): Бьерн Страуструп
Книга написана Бьёрном Страуструпом — автором языка программирования С++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре С++, так и современный объектно-ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по С++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе С++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».


А вообще на RSDN хорошая подборка ссылок, ознакомиться не помешает:
RSDN
Posted via RSDN NNTP Server 1.9
--
Справедливость выше закона. А человечность выше справедливости.
Re[10]: шаблонный параметр шаблона
От: remark Россия http://www.1024cores.net/
Дата: 15.03.06 12:17
Оценка:
Здравствуйте, enots, Вы писали:

E>Здравствуйте, rg45, Вы писали:


>>>

>>> можно источник?

R>>Ну вообще то из головы писал, что первое на ум пришло


E>Тогда книженцию по которой шаблончики изучали (только не гворите что много книг изучал и поэтому не скажу ни одной )



Вот это типа очень полный справочник по шаблонам
здесь
Автор(ы): Дэвид Вандевурд, Николаи М. Джосаттис

Шаблоны C++ представляют собой активно развивающуюся часть языка программирования, предоставляющую программисту новые возможности быстрой разработки эффективных и надежных программ и повторного использования кода. Данная книга, написанная в соавторстве теоретиком C++ и программистом-практиком с большим опытом, удачно сочетает строгость изложения и полноту освещения темы с вопросами практического использования шаблонов. В книге содержится масса разнообразного материала, относящегося к программированию с использованием шаблонов, в том числе материал, который даст опытным программистам возможность преодолеть современные ограничения в этой области. Книга предполагает наличие у читателя достаточно глубоких знаний языка C++; тем не менее стиль изложения обеспечивает доступность материала как для квалифицированных специалистов, так и для программистов среднего уровня.

1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.