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

C++

Войти
Регистрация
Восстановить пароль
 
BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 351
#1

Шаблонное в аллокаторах - C++

15.02.2014, 18:50. Просмотров 403. Ответов 5
Метки нет (Все метки)

Разбираю стандартные аллокаторы и мне интересно узнать как понимать следующий typedef, как он работает?
C++
1
2
3
4
5
6
template <class T, class A = allocator<T> >
    class list
    {
    typedef typename A::template rebind<Link>::other Link_alloc;
    //...
    };
Непонятна именно часть typename A::template rebind - что это? Как это определяется? (имеется в виду не структура rebind, а конструкция.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2014, 18:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблонное в аллокаторах (C++):

Шаблонное наследование - C++
Это не вопрос, просто выражение удивления у дилетанта. Я крайне удивился, когда такое сработало: #include &lt;iostream&gt; ...

Шаблонное наследование - C++
#include &quot;stackcalculator.h&quot; #include &lt;cstring&gt; #include &quot;stack.h&quot; #include &quot;pointerstack.h&quot; int length = 100; template...

Шаблонное дерево. Длиннейший путь. - C++
Здравствуйте. Нужно написать метод, который бы возвращал длиннейший путь в шаблонном дереве в виде динамического массива элементов(путь...

Шаблонное вычисление типов и Variadic Templates - C++
Можно ли сделать что-то вроде этого: Этот код, естественно, не компилируется: template&lt;typename T&gt; class mtd_parser; ...

Решение задачи через шаблонное выражение - C++
Помогите направить меня на путь истины.Дана вот такая программа в двух файлах. Когда я задаю значения для переменных в выражениях vir1 и...

Шаблонное наследование - C++
Это не вопрос, просто выражение удивления у дилетанта. Я крайне удивился, когда такое сработало: #include &lt;iostream&gt; ...

Шаблонное наследование - C++
#include &quot;stackcalculator.h&quot; #include &lt;cstring&gt; #include &quot;stack.h&quot; #include &quot;pointerstack.h&quot; int length = 100; template...

Шаблонное дерево. Длиннейший путь. - C++
Здравствуйте. Нужно написать метод, который бы возвращал длиннейший путь в шаблонном дереве в виде динамического массива элементов(путь...

Шаблонное вычисление типов и Variadic Templates - C++
Можно ли сделать что-то вроде этого: Этот код, естественно, не компилируется: template&lt;typename T&gt; class mtd_parser; ...

Решение задачи через шаблонное выражение - C++
Помогите направить меня на путь истины.Дана вот такая программа в двух файлах. Когда я задаю значения для переменных в выражениях vir1 и...

Шаблонное наследование - C++
Это не вопрос, просто выражение удивления у дилетанта. Я крайне удивился, когда такое сработало: #include &lt;iostream&gt; ...

Шаблонное наследование - C++
#include &quot;stackcalculator.h&quot; #include &lt;cstring&gt; #include &quot;stack.h&quot; #include &quot;pointerstack.h&quot; int length = 100; template...

Шаблонное дерево. Длиннейший путь. - C++
Здравствуйте. Нужно написать метод, который бы возвращал длиннейший путь в шаблонном дереве в виде динамического массива элементов(путь...

Шаблонное вычисление типов и Variadic Templates - C++
Можно ли сделать что-то вроде этого: Этот код, естественно, не компилируется: template&lt;typename T&gt; class mtd_parser; ...

Решение задачи через шаблонное выражение - C++
Помогите направить меня на путь истины.Дана вот такая программа в двух файлах. Когда я задаю значения для пер

Шаблонное наследование - C++
Это не вопрос, просто выражение удивления у дилетанта. Я крайне удивился, когда такое сработало: #include &lt;iostream&gt; ...

Шаблонное наследование - C++
#include &quot;stackcalculator.h&quot; #include &lt;cstring&gt; #include &quot;stack.h&quot; #include &quot;pointerstack.h&quot; int length = 100; template...

Шаблонное дерево. Длиннейший путь. - C++
Здравствуйте. Нужно написать метод, который бы возвращал длиннейший путь в шаблонном дереве в виде динамического массива элементов(путь...

Шаблонное вычисление типов и Variadic Templates - C++
Можно ли сделать что-то вроде этого: Этот код, естественно, не компилируется: template&lt;typename T&gt; class mtd_parser; ...

Решение задачи через шаблонное выражение - C++
Помогите направить меня на путь истины.Дана вот такая программа в двух файлах. Когда я задаю значения для переменных в выражениях vir1 и...


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

Или воспользуйтесь поиском по форуму:
5
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
15.02.2014, 23:00 #2
BESSON_off, шаблон класса rebind и вложенный тип other зависят от параметра шаблона A. До инстанциирования неизвестно, чем они являются - типом и ещё чем, поэтому надо это самому указывать - typename - тип, template - шаблон.
0
BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 351
17.02.2014, 20:36  [ТС] #3
Можно поподробней... поэтапно
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
17.02.2014, 23:52 #4
BESSON_off, по каким этапам? :/ Вот тут есть неплохое объяснение http://stackoverflow.com/questions/6...ename-keywords (1-й ответ)
0
BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 351
19.02.2014, 19:37  [ТС] #5
Про шаблоны я вдупляю. Все, что мне непонятно строка
C++
1
typename A::template rebind<Link>
Т.е. имеем код:
C++
1
2
3
4
5
6
7
8
9
10
11
typename <class T>
struct Temp
{
template <class U>
struct Xz {typedef typename Temp<U>::Other;};
};
template <class X, class U>
class Link
{
typedef typename Temp<X>::Xz<U>::Other Link_other;
};
(пример не имеет смысла, приведен лишь для наглядности)
Вот это мне понятно... А, то что я писал выше... никакой логики по моему... не?
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
19.02.2014, 20:03 #6
Цитата Сообщение от BESSON_off Посмотреть сообщение
C++
1
typename Temp<X>::Xz<U>::Other
Так же, как здесь ты используешь typename для того, что бы указать, что Other - это тип, для Xz необходимо указать, что это шаблон, т.е. использовать template:
C++
1
typename Temp<X>::template Xz<U>::Other
Всё потому что определение Temp<X> неизвестно до инстанциирования, и соответственно неизвестно чем является Xz.
0
19.02.2014, 20:03
Ответ Создать тему
Опции темы

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