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

C++

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

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

15.02.2014, 18:50. Просмотров 376. Ответов 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, а конструкция.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2014, 18:50     Шаблонное в аллокаторах
Посмотрите здесь:

Шаблонное дерево. Длиннейший путь. C++
C++ Решение задачи через шаблонное выражение
C++ Шаблонное наследование
Шаблонное вычисление типов и Variadic Templates C++
Шаблонное наследование C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
15.02.2014, 23:00     Шаблонное в аллокаторах #2
BESSON_off, шаблон класса rebind и вложенный тип other зависят от параметра шаблона A. До инстанциирования неизвестно, чем они являются - типом и ещё чем, поэтому надо это самому указывать - typename - тип, template - шаблон.
BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 338
17.02.2014, 20:36  [ТС]     Шаблонное в аллокаторах #3
Можно поподробней... поэтапно
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
17.02.2014, 23:52     Шаблонное в аллокаторах #4
BESSON_off, по каким этапам? :/ Вот тут есть неплохое объяснение http://stackoverflow.com/questions/6...ename-keywords (1-й ответ)
BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 338
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;
};
(пример не имеет смысла, приведен лишь для наглядности)
Вот это мне понятно... А, то что я писал выше... никакой логики по моему... не?
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 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.
Yandex
Объявления
19.02.2014, 20:03     Шаблонное в аллокаторах
Ответ Создать тему
Опции темы

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