Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
 
_Valera_
486 / 368 / 94
Регистрация: 27.01.2015
Сообщений: 1,588
#1

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

01.12.2015, 10:59. Просмотров 742. Ответов 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;
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2015, 10:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что означает using typename в шаблоне? (C++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,666
01.12.2015, 11:07 #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++ 11/ Замена typedef ==> сделали синоним типа T, обозвав его value_type
_Valera_
486 / 368 / 94
Регистрация: 27.01.2015
Сообщений: 1,588
01.12.2015, 11:09  [ТС] #3
daslex, а в чем смысл?
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,666
01.12.2015, 11:19 #4
Автор кода решил, что ему value_type понятнее чем T,
смысл абсолютно тот же, что у typedef, только синтаксис немного удобнее.

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

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

Не по теме:

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

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

Не по теме:

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

ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
01.12.2015, 11:37 #7
daslex,
Цитата Сообщение от daslex Посмотреть сообщение
можно было сразу написать
C++
1
template < typename value_type >
и было бы короче.
Добавлено через 1 минуту
Конкретно в этом случае весь смысл - выпендреж.
Ага, конечно же, а потом попробуйте к этому value_type достучаться извне, в коде который представлен это возможно.
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,666
01.12.2015, 11:47 #8
Вообще не понял.
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; //Тук-тук
 
}
Croessmah
Модератор
Эксперт CЭксперт С++
13133 / 7396 / 828
Регистрация: 27.09.2012
Сообщений: 18,227
Записей в блоге: 3
Завершенные тесты: 1
01.12.2015, 12:05 #9
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 ; //Тут-тук, а так уже открыли.
 }
Так смысл понятен?
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,666
01.12.2015, 12:15 #10
нет. не понятен. Понятно стало, что именно нельзя, но совсем непонятно когда оно надо.
Croessmah
Модератор
Эксперт CЭксперт С++
13133 / 7396 / 828
Регистрация: 27.09.2012
Сообщений: 18,227
Записей в блоге: 3
Завершенные тесты: 1
01.12.2015, 12:17 #11
Цитата Сообщение от daslex Посмотреть сообщение
Понятно стало, что именно нельзя, но совсем непонятно когда оно надо.
Когда нужно
Цитата Сообщение от ForEveR Посмотреть сообщение
к этому value_type достучаться извне
Например,
std::string::size_type
std::map::value_type
и т.д.
rikimaru2013
C++ Game Dev
2428 / 1122 / 240
Регистрация: 30.11.2013
Сообщений: 3,673
01.12.2015, 12:28 #12
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;
}
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,666
01.12.2015, 12:35 #13
Croessmah, Это плохой пример на вопрос "Зачем"? Потому что намного проще создать переменную unsigned int или size_t.
DrOffset
7090 / 4231 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
01.12.2015, 12:41 #14
Цитата Сообщение от 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);
}
Croessmah
Модератор
Эксперт CЭксперт С++
13133 / 7396 / 828
Регистрация: 27.09.2012
Сообщений: 18,227
Записей в блоге: 3
Завершенные тесты: 1
01.12.2015, 12:46 #15
Цитата Сообщение от 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 ;
}
что-то сложнее писать лень, честно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2015, 12:46
Привет! Вот еще темы с ответами:

Что означает ? - C++
Вот функция добавления нового елемента в начало Plist pt; pt = new list; pt-&gt;data = data; pt-&gt;next = sfirst; ...

Что означает %d - C++
#include &lt;stdio.h&gt; int main() { FILE *f; char Name = &quot;C:\\Users\\FX-8350\\Desktop\\text.docx&quot;; int Year = 884; f =...

Что означает - C++
if(!min &amp;&amp; number &gt; 0) min = number; else if(min &amp;&amp; number &gt; 0 &amp;&amp; number &lt; min) min = number;

что означает - C++
Что означает такая инструкция? char str;


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.12.2015, 12:46
Ответ Создать тему
Опции темы

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