Заблокирован
1

В чем различие template <typename T> от template <class T> ?

18.11.2015, 14:52. Показов 8490. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день !
Заметил в новых книгах применение записи
C++
1
template <typename T>
вместо
C++
1
template <class T>
в чем же тогда фишка ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.11.2015, 14:52
Ответы с готовыми решениями:

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

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

Не пойму конструкцию template <template <class T> class X>
Что это за шаблон такой?

Friend template class with template class argument
Помогите подружить 2 класса: Имеется класс Student: template &lt;class _T&gt; class Faculty; class...

29
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
18.11.2015, 15:01 2
Лучший ответ Сообщение было отмечено RAFA91 как решение

Решение

Это абсолютные синонимы. Изначально использовалось слово class.
Но в следствии того, что слово class в языке и так загружено значениями, возникали конфузы... Впоследствии ввели слово typename для использования его в шаблонах. Стандарт допускает оба использования, но рекомендует typename. Слово class оставлено для обратной совместимости.
2
Заблокирован
18.11.2015, 15:05  [ТС] 3
а дополнительные какие-то атрибуты у typename имеются ?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
18.11.2015, 15:53 4
Лучший ответ Сообщение было отмечено Kastaneda как решение

Решение

Цитата Сообщение от Mirmik Посмотреть сообщение
Это абсолютные синонимы.
В большинстве случаев - да. Но есть нюанс (на текущий момент):
C++
1
2
3
4
5
6
7
//template<template<typename> class C> // ok
//template<template<class> class C> // ok
//template<template<class> typename C> // c++17 only
template<template<typename> typename C> // c++17 only
void f() { }
 
int main() { }
http://coliru.stacked-crooked.... 716d37b665
template template parameter using 'typename' is a C++1z extension [-Wc++1z-extensions]
В c++17 должны стать действительно синонимами.
3
Заблокирован
18.11.2015, 17:14  [ТС] 5
Цитата Сообщение от Tulosba Посмотреть сообщение
template<typename>
что это за дебри ?

пример этого чуда в коде привести сможете ?
0
Неэпический
17848 / 10616 / 2049
Регистрация: 27.09.2012
Сообщений: 26,684
Записей в блоге: 1
18.11.2015, 17:25 6
Лучший ответ Сообщение было отмечено Новичок как решение

Решение

Цитата Сообщение от RAFA91 Посмотреть сообщение
что это за дебри ?
Template template argument
2
Заблокирован
18.11.2015, 17:26  [ТС] 7
ну для такого примера можно и так

C++
1
2
template< typename C>
void f() { }
0
Неэпический
17848 / 10616 / 2049
Регистрация: 27.09.2012
Сообщений: 26,684
Записей в блоге: 1
18.11.2015, 17:30 8
Цитата Сообщение от RAFA91 Посмотреть сообщение
пример этого чуда в коде привести сможете ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <vector>
 
 
template<template<typename...> class Cont>
void foo ( )
{
    Cont<int> cont(10,5) ;
    for (auto & e : cont)
        std::cout << e << std::endl ;
}
 
 
int main()
{
    foo<std::vector>() ;
}
то бишь аргумент шаблона сам является шаблоном
2
Заблокирован
18.11.2015, 17:36  [ТС] 9
не знаю что вы хотели этим кодом показать, особенно этим

for (auto & e : cont)
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
18.11.2015, 17:38 10
Цитата Сообщение от RAFA91 Посмотреть сообщение
ну для такого примера можно и так
А можно и так
C++
1
void f() { }
или вовсе так:
C++
1
 
Добавлено через 1 минуту

Не по теме:

Croessmah, всё, попал ты, теперь до скончания времен придется на вопросы RAFA91 отвечать :D

3
Неэпический
17848 / 10616 / 2049
Регистрация: 27.09.2012
Сообщений: 26,684
Записей в блоге: 1
18.11.2015, 17:45 11

Не по теме:

Tulosba, упал под стол :rofl:



Добавлено через 5 минут

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
всё, попал ты, теперь до скончания времен придется на вопросы RAFA91 отвечать
ага, счазззз, только платочек на голову натяну )))



Добавлено через 52 секунды
Цитата Сообщение от RAFA91 Посмотреть сообщение
не знаю что вы хотели этим кодом показать
ну значит как дойдете до темы шаблонных параметров шаблона, так поймете
1
Заблокирован
18.11.2015, 17:48  [ТС] 12
не могу понять почему не пашит эта строка
C++
1
template<template <class T>>
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
template <class T> class A
{};
 
template <class T> class B
{};
 
template<template <class T>>
void func()
{
    T<int> a;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    func<A>();
    return 0;
}
0
Tulosba
18.11.2015, 17:51
  #13

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
только платочек на голову натяну )))
Тогда castaway скажет, что ты как старая бабка :) Мне недавно сказал.

0
Неэпический
17848 / 10616 / 2049
Регистрация: 27.09.2012
Сообщений: 26,684
Записей в блоге: 1
18.11.2015, 17:54 14
RAFA91,
C++
1
template<template <class> class T>
Добавлено через 59 секунд

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Тогда castaway скажет, что ты как старая бабка
ну тогда возьму семечек, сяду на балкон и буду смотреть кто из сауны выходит :D

1
Заблокирован
18.11.2015, 17:57  [ТС] 15
Цитата Сообщение от Croessmah Посмотреть сообщение
template<template <class> class T>
Спасибо. кстати с троеточием не работает. только так
C++
1
template<template<typename> class T>
зачем тогда вообще это typename раз так нельзя
C++
1
template<template<typename> typename T>
0
Неэпический
17848 / 10616 / 2049
Регистрация: 27.09.2012
Сообщений: 26,684
Записей в блоге: 1
18.11.2015, 17:59 16
Лучший ответ Сообщение было отмечено RAFA91 как решение

Решение

Цитата Сообщение от RAFA91 Посмотреть сообщение
кстати с троеточием не работает
поддержка c++11 нужна
Цитата Сообщение от RAFA91 Посмотреть сообщение
зачем тогда вообще это typename раз так нельзя
у шаблона же тоже есть шаблонные параметры, вот и указываем что там да как.
1
Заблокирован
18.11.2015, 18:02  [ТС] 17
Цитата Сообщение от Croessmah Посмотреть сообщение
у шаблона же тоже есть шаблонные параметры, вот и указываем что там да как.

это если

C++
1
T<Q> a;
?
0
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
18.11.2015, 19:34 18
Цитата Сообщение от RAFA91 Посмотреть сообщение
что это за дебри ?
Параметрический полиморфизм 2-го ранга

Цитата Сообщение от RAFA91 Посмотреть сообщение
пример этого чуда в коде привести сможете ?
Монады
1
Заблокирован
19.11.2015, 14:59  [ТС] 19
Подскажите пожалуйста , что неправильно в этой строке
C++
1
template<template<class> class T1<T2>>
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
template <class T> class A
{};
 
template <class T> class B
{};
 
template<template<class> class T1<T2>>
void func()
{
    T1<T2> a;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    func<A<int>>();
    return 0;
}
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
19.11.2015, 15:14 20
C++
1
2
3
4
5
6
7
8
9
10
11
template<template<class> class T1, class T2>
void func()
{
    T1<T2> a;
}
 
int main()
{
    func<B,int>();
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2015, 15:14
Помогаю со студенческими работами здесь

Template<typename T> vs auto
template &lt;typename T&gt; vector&lt;T&gt; my_vec1; vector&lt;auto&gt; my_vec2;Какая разница между содержимым...

Visual c++ шаблон template <typename TT>
пытаюсь разобраться с шаблонами, но выдает ошибку я даже не знаю куда смотреть...

Тип аргумента template<typename .Args>
Нужно выполнить определенный код при определенном типе аргумента Через шаблон или во время...

Использование шаблонов при описании классов template<typename type>
mylist.h template&lt;typename T&gt; class MyList { public: MyList(); ~MyList(); void...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru