Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Можно ли вернуть из шаблонной функции value_type 
:(
    Опции темы
disputant
Дата 23.2.2012, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 28.11.2011

Репутация: нет
Всего: 3



Заинтересовал такой вопрос - пусть есть шаблонная функция вида

template<typename RandomIterator>
void func(RandomIterator i) {...}

В ней легко и просто работать с типом, на который указывает итератор -
typedef typename iterator_traits<RandIter>::value_type Value; и вперед...

А как сделать функцию, которая возвращает значение этого типа? Что-то вроде

template<typename RandomIterator>
iterator_traits<RandIter>::value_type func(RandomIterator i) {...} ? 

Такое в принципе возможно?




PM MAIL   Вверх
586
Дата 24.2.2012, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 10
Всего: 146



Цитата(disputant @  23.2.2012,  23:37 Найти цитируемый пост)
template<typename RandomIterator>
iterator_traits<RandIter>::value_type func(RandomIterator i) {...} ? 

Такое в принципе возможно?

Да.

template<typename RandomIterator>
typename iterator_traits<RandIter>::value_type func(RandomIterator i) {...}
PM   Вверх
disputant
Дата 24.2.2012, 05:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 28.11.2011

Репутация: нет
Всего: 3



Цитата(586 @ 24.2.2012,  00:22)
Да.

template<typename RandomIterator>
typename iterator_traits<RandIter>::value_type func(RandomIterator i) {...}

Спасибо, и правда работает!  smile 

Никак не могу прочувствовать этот typename - где его надо ставить, где не надо... Прямо как артикли a и the в английском - тоже вечно они у меня не к месту  smile 

Нет какого-то ПРОСТОГО до тупизны правила, чтоб даже до меня дошло? smile



PM MAIL   Вверх
Result
Дата 24.2.2012, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 15.5.2011

Репутация: 2
Всего: 5



Цитата(disputant @ 24.2.2012,  05:55)
Нет какого-то ПРОСТОГО до тупизны правила, чтоб даже до меня дошло? smile

Scott Meyers Effective C++ Third Edition, 55 Верных советов улучшить структуру и код ваших программ - правило 42.
PM   Вверх
newbee
Дата 24.2.2012, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 4
Всего: 19



Когда из(-под) шаблона выводится тип, нужно ставить typename.


--------------------
You're face to face
With man who sold the world
PM   Вверх
borisbn
Дата 24.2.2012, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Билдерюга этого НЕ требует. Как-то я взял свой проект с билдера (не весь, а несколько исходников) и попытался откомпилировать в студии. Долго тупил, зачем от меня требуют typename...


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
volatile
Дата 24.2.2012, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Студия почти русским языком говорит что надо делать:
Код

warning C4346: 'iterator_traits<_Iter>::value_type' : dependent name is not a type 
    prefix with 'typename' to indicate a type


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0470 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.