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

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

Войти
Регистрация
Восстановить пароль
 
 
RAFA91
Заблокирован
#1

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

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

Добрый день !
Заметил в новых книгах применение записи
C++
1
template <typename T>
вместо
C++
1
template <class T>
в чем же тогда фишка ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2015, 14:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В чем различие template <typename T> от template <class T> ? (C++):

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

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

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

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

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

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

29
Mirmik
177 / 148 / 37
Регистрация: 27.02.2014
Сообщений: 791
18.11.2015, 15:01 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Это абсолютные синонимы. Изначально использовалось слово class.
Но в следствии того, что слово class в языке и так загружено значениями, возникали конфузы... Впоследствии ввели слово typename для использования его в шаблонах. Стандарт допускает оба использования, но рекомендует typename. Слово class оставлено для обратной совместимости.
2
RAFA91
Заблокирован
18.11.2015, 15:05  [ТС] #3
а дополнительные какие-то атрибуты у typename имеются ?
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
18.11.2015, 15:53 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от 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.com/a/9ab7ed716d37b665
template template parameter using 'typename' is a C++1z extension [-Wc++1z-extensions]
В c++17 должны стать действительно синонимами.
3
RAFA91
Заблокирован
18.11.2015, 17:14  [ТС] #5
Цитата Сообщение от Tulosba Посмотреть сообщение
template<typename>
что это за дебри ?

пример этого чуда в коде привести сможете ?
0
Croessmah
Ушел
Эксперт CЭксперт С++
13554 / 7705 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
18.11.2015, 17:25 #6
Цитата Сообщение от RAFA91 Посмотреть сообщение
что это за дебри ?
Template template argument
1
RAFA91
Заблокирован
18.11.2015, 17:26  [ТС] #7
ну для такого примера можно и так

C++
1
2
template< typename C>
void f() { }
0
Croessmah
Ушел
Эксперт CЭксперт С++
13554 / 7705 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 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>() ;
}
то бишь аргумент шаблона сам является шаблоном
1
RAFA91
Заблокирован
18.11.2015, 17:36  [ТС] #9
не знаю что вы хотели этим кодом показать, особенно этим

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

Не по теме:

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

2
Croessmah
Ушел
Эксперт CЭксперт С++
13554 / 7705 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
18.11.2015, 17:45 #11

Не по теме:

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



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

Не по теме:

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



Добавлено через 52 секунды
Цитата Сообщение от RAFA91 Посмотреть сообщение
не знаю что вы хотели этим кодом показать
ну значит как дойдете до темы шаблонных параметров шаблона, так поймете
1
RAFA91
Заблокирован
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
Croessmah
Ушел
Эксперт CЭксперт С++
13554 / 7705 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
18.11.2015, 17:54 #14
RAFA91,
C++
1
template<template <class> class T>
Добавлено через 59 секунд

Не по теме:

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

1
RAFA91
Заблокирован
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
18.11.2015, 17:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2015, 17:57
Привет! Вот еще темы с ответами:

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

Ошибка компиляции: template-id does not match any template declaration - C++
Здравствуйте. Помогите, пожалуйста: #include &lt;iostream&gt; using namespace std; template &lt;typename T&gt; T maxn(T*, const int*); ...

Visual Studio выдаёт ошибку при вынесении объявления функции с template в .h файл. Без template всё работает - C++
Проект содержит три файла: Source.cpp, arrTreat.h, arrTreat.cpp. Source.cpp: #include &lt;iostream&gt; using std::cout; using...

Template class - C++
Возможно ли разделить шаблонный класс на два файла так, что в одном из файлов буду объявления, а в другом определения членов класса? ...


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

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

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