3 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 351
|
|||||||||||
1 | |||||||||||
Объясните пожалуйста зачем нужна структура класса iterator_traits.23.01.2014, 18:42. Показов 5297. Ответов 6
Метки нет (Все метки)
Всем привет!
Объясните пожалуйста зачем нужна структура класса iterator_traits. Ведь все тайпдефы, которые содержатся в этой структуре имеются в каждом стандартном контейнере. И код:
0
|
23.01.2014, 18:42 | |
Ответы с готовыми решениями:
6
Объясните, пожалуйста, зачем в C++ нужны указатели Объясните зачем нужна данная функция Зачем присваивать переменной disc ноль? Объясните пожалуйста Объясните пожалуйста зачем при авторизации создавать новую сессию |
Ушел с форума
|
|
23.01.2014, 19:57 | 2 |
Интересный вопрос.
Представьте, что итератор для какого-то контейнера на самом деле является обычным указателем. Но для алгоритмов из STL нужно больше сведений, чем этот указатель может предоставить, а поместить "внутрь" него соответствующие typedef-ы нельзя. Вот для этого, в частности, и нужны traits.
1
|
3 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 351
|
|
23.01.2014, 20:14 [ТС] | 3 |
И помещая этот указатель к traits я делаю из него итератор, способный работать с обобщенными алгоритмами... ?
0
|
Ушел с форума
|
|
23.01.2014, 21:21 | 4 |
Чтобы сделать STL-совместимый итератор, нужно удовлетворить всем требованиям,
описанным в разделе стандарта C++ "Iterator Requirements", в том числе и traits.
0
|
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
24.01.2014, 17:50 | 5 |
Кстати говоря, теперь это уже не так, всё содержимое iterator_traits для указателя легко выводится через decltype. Но, разумеется, на момент создания STL это был единственный вменяемый выход, который теперь, скорее всего, останется в стандарте очень надолго, если не насовсем, ради совместимости с уже наработанным кодом.
0
|
Ушел с форума
|
|
24.01.2014, 18:13 | 6 |
Что-то сомневаюсь. Как можно через decltype вывести iterator_category, например ?
0
|
1674 / 1046 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
24.01.2014, 20:07 | 7 |
Формально её можно вывести через SFINAE с тем же decltype, по наличию операций, характерных для каждой категории. А по сути из элементарных (встроенных) типов на роль итератора только указатель и сгодится, а его категория уже сразу известна. Для других типов, не элементарных, уже ничто не помешает определять вложенные typedef-ы.
0
|
24.01.2014, 20:07 | |
24.01.2014, 20:07 | |
Помогаю со студенческими работами здесь
7
Объясните пожалуйста, в чем здесь дело(структура и указатель) Объясните, пожалуйста, создание экземпляра класса в примере Структура С++ нужна допомога, не знаю почему программа не работает, пожалуйста Объясните зачем нужны конструкторы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |