Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/48: Рейтинг темы: голосов - 48, средняя оценка - 4.69
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452

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

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

Студворк — интернет-сервис помощи студентам
Добрый день !
Заметил в новых книгах применение записи
C++
1
template <typename T>
вместо
C++
1
template <class T>
в чем же тогда фишка ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
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
Написал код про шаблоны. Не могу понять почему выводит ошибку во время наследования класса. ошибки 'MyQueue' : use of class template...

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

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

Решение

Это абсолютные синонимы. Изначально использовалось слово class.
Но в следствии того, что слово class в языке и так загружено значениями, возникали конфузы... Впоследствии ввели слово typename для использования его в шаблонах. Стандарт допускает оба использования, но рекомендует typename. Слово class оставлено для обратной совместимости.
2
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
18.11.2015, 15:05  [ТС]
а дополнительные какие-то атрибуты у typename имеются ?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
18.11.2015, 15:53
Лучший ответ Сообщение было отмечено 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
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
18.11.2015, 17:14  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
template<typename>
что это за дебри ?

пример этого чуда в коде привести сможете ?
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
18.11.2015, 17:25
Лучший ответ Сообщение было отмечено Новичок как решение

Решение

Цитата Сообщение от RAFA91 Посмотреть сообщение
что это за дебри ?
Template template argument
2
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
18.11.2015, 17:26  [ТС]
ну для такого примера можно и так

C++
1
2
template< typename C>
void f() { }
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
18.11.2015, 17:30
Цитата Сообщение от 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
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
18.11.2015, 17:36  [ТС]
не знаю что вы хотели этим кодом показать, особенно этим

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

Не по теме:

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

3
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
18.11.2015, 17:45

Не по теме:

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



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

Не по теме:

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



Добавлено через 52 секунды
Цитата Сообщение от RAFA91 Посмотреть сообщение
не знаю что вы хотели этим кодом показать
ну значит как дойдете до темы шаблонных параметров шаблона, так поймете
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
18.11.2015, 17:48  [ТС]
не могу понять почему не пашит эта строка
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
18.11.2015, 17:51

Не по теме:

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

0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
18.11.2015, 17:54
RAFA91,
C++
1
template<template <class> class T>
Добавлено через 59 секунд

Не по теме:

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

1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
18.11.2015, 17:57  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
template<template <class> class T>
Спасибо. кстати с троеточием не работает. только так
C++
1
template<template<typename> class T>
зачем тогда вообще это typename раз так нельзя
C++
1
template<template<typename> typename T>
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
18.11.2015, 17:59
Лучший ответ Сообщение было отмечено RAFA91 как решение

Решение

Цитата Сообщение от RAFA91 Посмотреть сообщение
кстати с троеточием не работает
поддержка c++11 нужна
Цитата Сообщение от RAFA91 Посмотреть сообщение
зачем тогда вообще это typename раз так нельзя
у шаблона же тоже есть шаблонные параметры, вот и указываем что там да как.
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
18.11.2015, 18:02  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
у шаблона же тоже есть шаблонные параметры, вот и указываем что там да как.

это если

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

Цитата Сообщение от RAFA91 Посмотреть сообщение
пример этого чуда в коде привести сможете ?
Монады
1
 Аватар для RAFA91
-28 / 35 / 25
Регистрация: 14.06.2013
Сообщений: 1,452
19.11.2015, 14:59  [ТС]
Подскажите пожалуйста , что неправильно в этой строке
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
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.11.2015, 15:14
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru