Упреждающее объявление (forward declaration) для шаблонных классов |
Здравствуйте, гость ( Вход | Регистрация )
Упреждающее объявление (forward declaration) для шаблонных классов |
daorus |
30.10.2010, 20:18
Сообщение
#1
|
Студент Группа: Участник Сообщений: 20 Регистрация: 30.10.2010 Пользователь №: 2163 Спасибо сказали: 0 раз(а) Репутация: 0 |
Какой синтаксис форвад-декларации для типа хеш, если я хочу в классе хранить на него указатель
Сообщение отредактировал Litkevich Yuriy - 30.10.2010, 20:27
Причина редактирования: Перенёс, так как относится не к Qt, а к Си++
|
|
|
Алексей1153 |
30.10.2010, 20:25
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
помести
#include <QHash> #include <QString> в заголовочный файл ну а если поизвращаться всё равно надо, то сделай класс-оболочку, а вот его уже форвардни Сообщение отредактировал Алексей1153 - 30.10.2010, 20:26 |
|
|
Litkevich Yuriy |
30.10.2010, 20:30
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Здесь для QString этот номер не пройдёт, т.к. используются не указатели на него.
Вообще forward declaration возможен только в случае применения указателей. Т.к. их размер (в памяти) постоянен |
|
|
kwisp |
30.10.2010, 20:33
Сообщение
#4
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
интересный вопрос. что на данный вопрос отвечает гугл?
просто так пальцем в небо. template <> class QHash<QString, QString>; не схавает? а вообще конечно - такого рода штуки могут быть непереносимы так что, можно и отказаться от такого рода forward declaration в случае применения указателей. а ссылок? |
|
|
Litkevich Yuriy |
30.10.2010, 20:46
Сообщение
#5
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Алексей1153 |
30.10.2010, 20:51
Сообщение
#6
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
ссылка - также, как и указатель. Потому что это одно и тоже для компилятора
|
|
|
igor_bogomolov |
30.10.2010, 21:25
Сообщение
#7
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Какой синтаксис форвад-декларации для типа хеш, если я хочу в классе хранить на него указатель Да все просто на самом деле
|
|
|
Алексей1153 |
30.10.2010, 21:52
Сообщение
#8
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Игорь, сильно сомневаюсь
template <class Key, class T> class QHash; QHash<QString, QString>* dic; а ты проверил, компилится ? Будет ведь переопределение класса QHash из его инклуда Сообщение отредактировал Алексей1153 - 30.10.2010, 21:53 |
|
|
igor_bogomolov |
30.10.2010, 22:07
Сообщение
#9
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Игорь, сильно сомневаюсь На всякий случай проверил, все работает. Хотя и так знал. В исходниках Qt довольно часто используется такое предварительное объявление шаблонных классов. Будет ведь переопределение класса QHash из его инклуда Вообще этой фразы не понял. Какое еще переопределение?В .h файле нам всего лишь нужно указать тип класса. Никаких уточнений не нужно, так как создается указатель и инстанцирования не происходит. В момент инстанцирования вся информация о параметрах шаблона уже есть |
|
|
Алексей1153 |
30.10.2010, 22:15
Сообщение
#10
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
igor_bogomolov, всё, дошло до меня Я просто никогда так не предопределял шаблоны
|
|
|
Текстовая версия | Сейчас: 30.12.2024, 20:27 |