| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Копирование из std::vector::iterator в параметриз. |
| Автор: EvilsInterrupt 18.8.2010, 09:28 | ||||
Пишу шаблонный класс:
Главный вопрос: пытаюсь в get скопировать из вектора в T * алгоритмом std::copy , но не получается. ругается такой ошибкой:
вопрос, как это сделать ? Второстепенный: typedef typename VecT_t::iterator VecTItr_t; Почему в этом месте компиллер нуждается в написании ключевого слова "typename" ? |
| Автор: azesmcar 18.8.2010, 09:37 |
Это не ошибка, это предупреждение, |
| Автор: EgorTheBlade 18.8.2010, 09:38 |
| Подключите в свойствах проекта -D_SCL_SECURE_NO_WARNINGS; |
| Автор: EvilsInterrupt 18.8.2010, 09:41 | ||
| >>-D_SCL_SECURE_NO_WARNINGS; но тогда я лишусь проверки других функций, а не вот этого конкретного места. Как сказать компиллеру (MSVC 2008/2010) что именно в этом месте, а я отлично шарю чего делаю и все вычислил для этого ? Добавлено через 1 минуту и 19 секунд >>Это не ошибка, это предупреждение, был бы варнинг, то позволил бы выполнять код и до работал бы до поставленного мною бряка! а у меня на последней стоит бряк:
и не срабатывает! |
| Автор: EvilsInterrupt 18.8.2010, 09:52 |
| Всем спасибо, был допущен некоторый баг ;))) + это отключение варнинга, вопрос решен! ;) |
| Автор: azesmcar 18.8.2010, 10:02 | ||
Пожалуйста.
typename тут нужен для того, чтобы dependant типы распознавались. |
| Автор: EvilsInterrupt 18.8.2010, 11:30 |
| Надеюсь не буду слишком назойливым если прошу что следует понимать под термином "dependant типы" ? ;) |
| Автор: mes 18.8.2010, 11:34 |
| зависимые от аргумента шаблона Добавлено через 8 минут и 1 секунду вот пример когда t в одном случае является типом, а в другом значением http://codepad.org/7Wx0rYd5 а компилятор должен заранее знать, как именно квалифицировать зависимое имя. |
| Автор: Леопольд 18.8.2010, 11:43 | ||
Добавлено @ 11:49 EvilsInterrupt, зачем использовать приведения типов от std::size_t к знаковому int? Если же оно необходимо, тогда правилом хорошего тона считается использовать приведение С++ а не С. Т.е. static_cast, в данном случае. |
| Автор: EvilsInterrupt 18.8.2010, 12:08 |
| Леопольд, >>зачем использовать приведения типов от std::size_t к знаковому int ну по идеологии size_t это тип хранящий разность двух указателей, чтобы мог вместиться любой указатель, который на любой платформе как правило равен размеру регистра, то этот тип тоже приравниваются к этому размеру регистра . В моем же случае хватит и int и предполагается что чел юзающий буфер, врядли будет внем хранить на 2 ГБ ))) думаю максимум 5 МБ т.е. инт за глаза! ;) >>тогда правилом хорошего тона считается использовать приведение С++ а не С. Т.е. static_cast, в данном случае. к нему еще привыкать надо, а я еще думаю в стиле С ))) но согласен, укор правилен ;) |
| Автор: mes 18.8.2010, 12:17 | ||
если делаете шаблон, то зачем делать предположения за юзера ?! позвольте пользователю самому настроить необходимое. а чтоб не передавать кучу параметров в шаблон, погуглите насчет traits. В двух словах это такая структура, в которой описаны все типы и зависимости необходимые для настройки шаблона. |
| Автор: EvilsInterrupt 18.8.2010, 12:36 |
| mes, Вы об http://forum.sources.ru/index.php?showtopic=86507 ? >>если делаете шаблон, то зачем делать предположения за юзера ?! Затем чтоб лишний раз подумал прежде чем что-то сделать! Лично этот класс, пусть и шаблонный расчитан на использование мною и для моих нужд. В случае если он кому-то приглянется, чтобы четко знал что тут все нужно еще раз хорошо все просмотреть ;) |
| Автор: mes 18.8.2010, 12:43 | ||
Под пользователем подразумевается любой пользователь, и прежде всего Вы сами один раз определив нужный тип, Вы уже не будете путаться int там должен быть или не int не надо думать о других, делайте так, чтоб Вам было удобно и приятно .. |
| Автор: xvr 19.8.2010, 11:43 | ||
|
| Автор: EvilsInterrupt 19.8.2010, 12:11 |
| xvr, Любого из тривививальных так сказать? ;))) т.е пользовательские сюда уже не полезут ;) |
| Автор: xvr 19.8.2010, 12:20 | ||
Совсем любого. Переменная типа size_t способна вместить число, равное размеру чего угодно в памяти (т.е. проще говоря почти размеру виртуального адресного пространства). При этом она беззнаковая, т.к. объектов с отрицательным размером не бывает. |
| Автор: EvilsInterrupt 19.8.2010, 14:02 |
| xvr, Хорошо,но какой будет нативный тип , при котором будут наиболее эффективными вычисления? Если не int то что? Не он потому что на некоторых платформах, он должен быть 64-бита при компиляции под 64, а он все еще 32 ! ;) http://www.viva64.com/content/articles/64-bit-development/?f=size_t_and_ptrdiff_t_rus.html&lang=ru&content=64-bit-development |
| Автор: xvr 20.8.2010, 09:43 | ||||
int_fast32_t из stdint.4 (C99)
|