Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/29: Рейтинг темы: голосов - 29, средняя оценка - 4.93
 Аватар для _Valera_
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588

Что означает using typename в шаблоне?

01.12.2015, 10:59. Показов 6063. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
template < typename T >
class Class_name
{
    public:
        using value_type = T;
...
что произошло в этом месте? Зачем?
C++
1
using value_type = T;
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.12.2015, 10:59
Ответы с готовыми решениями:

Шаблоны. Что лучше <class T> или <typename T>?
Одни пишут &lt;class T&gt;, другие &lt;typename T&gt; Какая между ними разница?

Поясните пожалуйста что означает двоеточие и то что идет после него
В 4 строчке после параметра в скобочках нету &quot;;&quot; или же тела функции, что не сходится с моим шаблоном в голове. Поясните пожалуйста что...

скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что?
скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что? //анализируем все клетки доски for(int i = 0; i &lt;...

25
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
01.12.2015, 11:07
Лучший ответ Сообщение было отмечено _Valera_ как решение

Решение

C++ 11/ Замена typedef ==> сделали синоним типа T, обозвав его value_type
1
 Аватар для _Valera_
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
01.12.2015, 11:09  [ТС]
daslex, а в чем смысл?
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
01.12.2015, 11:19
Автор кода решил, что ему value_type понятнее чем T,
смысл абсолютно тот же, что у typedef, только синтаксис немного удобнее.

можно было сразу написать
C++
1
template < typename value_type >
и было бы короче.

Добавлено через 1 минуту
Конкретно в этом случае весь смысл - выпендреж.

Не по теме:

"Я умею юзать С++11, глядите, ущербные."

2
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
01.12.2015, 11:23
Цитата Сообщение от daslex Посмотреть сообщение
Конкретно в этом случае весь смысл - выпендреж.
А может человек не знает, что вместо Т можно использовать любое валидное имя. Ведь typename T или class T - это самые популярные имена для шаблонов
1
01.12.2015, 11:35

Не по теме:

я тоже об этом думал, но демонстрация знаний С++11 как-то солиднее. Может вообще из видеоуроков ютуба зацепилось и тащится.

0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
01.12.2015, 11:37
daslex,
Цитата Сообщение от daslex Посмотреть сообщение
можно было сразу написать
C++
1
template < typename value_type >
и было бы короче.
Добавлено через 1 минуту
Конкретно в этом случае весь смысл - выпендреж.
Ага, конечно же, а потом попробуйте к этому value_type достучаться извне, в коде который представлен это возможно.
4
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
01.12.2015, 11:47
Вообще не понял.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template < typename value_type >
class Class_name
{
public:
    
    value_type x;
};
 
int main() {
    Class_name<int> Obj;
 
    Obj.x = 90; //Тук-тук
 
}
1
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
01.12.2015, 12:05
daslex, value_type становится виден извне:
C++
1
2
3
4
5
6
7
8
9
10
11
12
template < typename value_type >
class Class_name
{
public:
    value_type x;
};
 
int main() {
    Class_name<int> Obj;
 
    Class_name<int>::value_type x = Obj.x ; //Тут-тук, а не открывают
 }
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template < typename T >
class Class_name
{
public:
    using value_type = T ;
    value_type x;
};
 
int main() {
    Class_name<int> Obj;
 
    Class_name<int>::value_type x = Obj.x ; //Тут-тук, а так уже открыли.
 }
Так смысл понятен?
2
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
01.12.2015, 12:15
нет. не понятен. Понятно стало, что именно нельзя, но совсем непонятно когда оно надо.
1
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
01.12.2015, 12:17
Цитата Сообщение от daslex Посмотреть сообщение
Понятно стало, что именно нельзя, но совсем непонятно когда оно надо.
Когда нужно
Цитата Сообщение от ForEveR Посмотреть сообщение
к этому value_type достучаться извне
Например,
std::string::size_type
std::map::value_type
и т.д.
2
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
01.12.2015, 12:28
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <functional>
using namespace std;
class Foo
{
public:
    int f1(char, double);
};
 
 
template<class T> struct help;                          // default
template<class ClassType, class ReturnType, class... Args>
struct help<ReturnType(ClassType::*)(Args...)>
{
    typedef std::function<ReturnType(Args...)>          // "Я умею юзать С++11, глядите, ущербные."
        deductionType;
};
 
 
int main()
{
    typedef help< decltype(&Foo::f1) >::deductionType
        MyCallbackType;
 
    MyCallbackType m_call;                              //  typedef std::function<int(char, double)> MyCallbackType;
}
2
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
01.12.2015, 12:35
Croessmah, Это плохой пример на вопрос "Зачем"? Потому что намного проще создать переменную unsigned int или size_t.
1
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
01.12.2015, 12:41
Цитата Сообщение от daslex Посмотреть сообщение
совсем непонятно когда оно надо.
C++
1
2
3
4
5
template <typename Cont>
void front_insert(Cont & cont, size_t n, typename Cont::value_type const & x)
{
    cont.insert(cont.begin(), n, x);
}
2
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
01.12.2015, 12:46
Цитата Сообщение от daslex Посмотреть сообщение
Потому что намного проще создать переменную unsigned int или size_t.
Если тип известен.
Цитата Сообщение от daslex Посмотреть сообщение
Это плохой пример на вопрос "Зачем"?
Да там и нет примера. Ну вот hello world пример.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <vector>
#include <list>
#include <string>
 
 
template <typename Cont>
typename Cont::value_type foo ( const Cont & cont )
{
    typename Cont::value_type s{} ;
    for ( auto & e : cont )
        s += e ;
    return s ;
}
 
 
int main()
{
    std::vector < int > v_int{1,2,3} ;
    std::list < double > l_dbl{6,4,3} ;
    std::vector < std::string > v_str{"hello", ", ", "world", "!"} ;
    std::cout << foo(v_int) << std::endl ;
    std::cout << foo(l_dbl) << std::endl ;
    std::cout << foo(v_str) << std::endl ;
}
что-то сложнее писать лень, честно
1
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
01.12.2015, 12:47
DrOffset, я о доступе извне. Вообще понял, просто тот первый "пример-не пример" от Croessmah, немного это скрывает из-за слишком сильной упрощенности (оно не очевидно становится).

А Ваш пример к чему, не понял.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
01.12.2015, 12:50
Цитата Сообщение от daslex Посмотреть сообщение
А Ваш пример к чему, не понял.
К тому, зачем нужен value_type.
Цитата Сообщение от daslex Посмотреть сообщение
я о доступе извне.
О каком доступе извне ты говоришь?
Мой пример иллюстрирует именно то, о чем говорил ForEveR: у нас есть шаблонный класс, например вектор, тип элемента был передан ему в параметре шаблона. Теперь нам надо узнать, какой тип элемента у типа вектора, чтобы использовать его, например, в другой функции. Для этого и нужен value_type, который нам подскажет "извне" вектора какой у него тип элемента.
Мой пример это демонстрирует.
1
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
01.12.2015, 12:53
Цитата Сообщение от DrOffset Посмотреть сообщение
О каком доступе извне ты говоришь?
Доступ извне к некоторому типу, а daslex, видимо, принял за доступ к члену-класса.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
01.12.2015, 13:01

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
Ага, конечно же, а потом попробуйте к этому value_type достучаться извне
как написано было, так и спрашиваю. Об этом же дальше мне отвечают, судя по моему вопросу. Или кашеварим?



Добавлено через 59 секунд
Цитата Сообщение от DrOffset Посмотреть сообщение
Мой пример это демонстрирует.
ясно.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
01.12.2015, 13:08
daslex, наши с Croessmah примеры иллюстрируют абсолютно одинаковое.
value_type - это тип, это не переменная.
C++
1
2
3
4
5
6
7
8
9
10
11
12
template <typename T>
class Vector 
{
    // интерфейс
};
 
template <typename V>
void foo(V & cont)
{
  //если V - это Vector<???>, то как тут узнать "???" ?
  ??? f_elem = cont.front();
}
теперь смотрим обновленным взглядом на фразу:
Цитата Сообщение от ForEveR Посмотреть сообщение
а потом попробуйте к этому value_type достучаться извне
value_type == T
А теперь попробуйте к этому value_type (T, типу который был передан в шаблон Vector) достучаться извне.
Так понятно ?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.12.2015, 13:08
Помогаю со студенческими работами здесь

Что означает запись в скобках и что возвращает return
Всем привет! Начал читать книгу BecomeAnXcoder и тут появился вопрос. В пример приведен такой код circleArea(float theRadius) //(1) ...

Что такое #, include, что это означает
______

Что-то в шаблоне не так
Сделал несколько шаблонных функций для одномерных массивов. Далее код. Всё работает, всё хорошо. Но... #include &lt;iostream&gt; ...

Что означает %s в шаблоне WordPress?
Здравствуйте есть тема с wordpress есть кнопка поиска через f12 такой код: &lt;button type=&quot;submit&quot;...

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


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

Или воспользуйтесь поиском по форуму:
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