![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
mezmay |
![]()
Сообщение
#1
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 272 Регистрация: 13.7.2009 Из: Ростов-на-Дону Пользователь №: 904 Спасибо сказали: 16 раз(а) Репутация: ![]() ![]() ![]() |
Проблема такая: хочу создать класс для обработки массивов чисел. Элементами могут быть вещественный или комплексный short, int, float, double. Программа должна работать примерно так: открываю файл, выбираю тип данных (например, комплексный float) и делаю необходимые преобразования массивов. Вопрос: как хранить прочитанный массив в классе? если например создать поле void *data и после открытия делать myObject.data = new scplx[n]; - то как передавать тип в методы? можно конечно создать enum types{ INT, FLOAT, ...} и в каждом методе делать switch (TYPE){ case INT: ..... case FLOAT: ...} но так слишком много case'ов придется везде вставлять. Есть ли какое-то нормальное решение этой проблемы?
вроде бы для подобных целей существуют шаблоны, но опять же - как задать шаблону тип во время выполения? |
|
|
AD |
![]()
Сообщение
#2
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
насколько я знаю, эту проблему можно решить ДАЖЕ на этапе компиляции, а не на этапе выполнения с помощью списков типов. Александреску подробно описывает эту штуку.
Посмотрите в интернете информацию о библиотеке Loki, где они реализованы. Возможно, подойдут. Она бесплатна для скачивания. Основная структура выглядит так:
Ну а остальное почитайте у Александреску, посмотрите исходники библиотеки. (Сам сегодня ее собрал - собралась без проблем, только список предупреждений - что нестрашно! ![]() Сообщение отредактировал AD - 21.7.2009, 10:15 |
|
|
kwisp |
![]()
Сообщение
#3
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
mezmay |
![]()
Сообщение
#4
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 272 Регистрация: 13.7.2009 Из: Ростов-на-Дону Пользователь №: 904 Спасибо сказали: 16 раз(а) Репутация: ![]() ![]() ![]() |
а что скажите о его книге: «Современное проектирование на С++: Обобщенное программирование и прикладные шаблоны проектирования» - хорошая?
|
|
|
kwisp |
![]()
Сообщение
#5
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
я думаю что да - хорошая, но зависит от уровня подготовки читателя.
![]() П.С. вопрос касательно литературы обсуждается в другой ветке форума. так что лучше писать туда, а то модератор ругаться будет. ![]() |
|
|
AD |
![]()
Сообщение
#6
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(mezmay) а что скажите о его книге: «Современное проектирование на С++: Обобщенное программирование и прикладные шаблоны проектирования» - хорошая? Я сейчас ее читаю. Книга полезная, интересная, но читать немного сложновато. Говорят, что читать ее проще, если знаешь функциональные языки программирования. |
|
|
D_K |
![]()
Сообщение
#7
|
Студент ![]() Группа: Участник Сообщений: 20 Регистрация: 20.5.2009 Пользователь №: 761 Спасибо сказали: 3 раз(а) Репутация: ![]() ![]() ![]() |
mezmay, а как собираешься использовать сие творение? Можно псевдокодом. От этого многое зависит.
Перед тем, как разбираться в том, как делать, нужно понять что конкретно ты хочешь сделать ![]() Я сейчас ее читаю. Книга полезная, интересная, но читать немного сложновато. Говорят, что читать ее проще, если знаешь функциональные языки программирования. Так списки типов и есть, фактически, функциональное программирование ![]() |
|
|
igor_bogomolov |
![]()
Сообщение
#8
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
mezmay,
а что скажите о его книге: «Современное проектирование на С++: Обобщенное программирование и прикладные шаблоны проектирования» - хорошая? Как сказал Kwisp, зависит от уровня читателя. Я так же пытаюсь ее освоить. Мозги скрипят, аж до соплей прошибает. Тяжело дается освоение. Но в отличае от GoF, с ее помощью я действительно продвинулся в решении своей задачи (см. соседнюю тему)По вопросу вобщемто уже все подсказали. См. 8 главу книги Александреску -"Фабрики объектов". Там как раз описывается то что ищешь. Сообщение отредактировал igor_bogomolov - 21.7.2009, 19:23 |
|
|
AD |
![]()
Сообщение
#9
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
AD |
![]()
Сообщение
#10
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
По иронии судьбы, встала та же задача, только типы не стандартные, а свои - пользовательские. Использовал Loki. Смысл такой: чтение заголовка карты, в зависимости от типа заголовка. Вот такой код получился (понимаю, не самый удачный код, но не закидывайте, пожалуйста, камнями - я только учусь!
![]()
Думаю, чем-то поможет. Функция Field<index>() - берет соответствующий тип. Насколько я понимаю, если функцию сделать шаблонной, то можно будет и упростить код. К сожалению, след. трюк не прошел:
Для того, чтобы такая конструкция сработала index должен иметь тип T. |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 17.2.2025, 0:08 |