![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| stalkerok |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 28.12.2007 Репутация: нет Всего: нет |
Добрый день! как в Delphi передать тип данных в процедуре, например:
есть несколько типов
Как в процедуре передать тип?
|
||||
|
|||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
вижу несколько вариантов:
1. Простой - Написать 3 перегруженных процедуры, каждая из которых работает со своим типом. 2. Более сложный - усложнить структуру. ввести поле "тип данных" и поле-указатель на сами данные, а в процедуре уже разбираться, что пришло. 3. Отказаться от записей и процедур и перейти на ООП. -------------------- There are always someone smarter than you... |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
4. Перейти на D2009 и использовать дженерики
-------------------- Обижено школьников: 8 |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
а с дженериками как бы решение выглядело? я просто еще "не перешел" и "не использовал" ))) -------------------- There are always someone smarter than you... |
|||
|
||||
| stalkerok |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 28.12.2007 Репутация: нет Всего: нет |
bems я на 2009, да действительно как бы это выглядело?
|
|||
|
||||
| bems |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
ну это зависит от того, что именно нужно )))
например что-то такое
Глобальные переменные тут только потому что у топикстартера это процедура с одним параметром (типом). А вообще можно и что-то такое
ну и ниже в коде как-то так:
-------------------- Обижено школьников: 8 |
||||||
|
|||||||
| stalkerok |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 28.12.2007 Репутация: нет Всего: нет |
разбирался... так и не получается... я хочу написать процедуру сохранения масивов в файл с разными типами
типы
а вот процедура
и затем просто вызывать её
Это сообщение отредактировал(а) stalkerok - 12.12.2008, 00:46 |
||||||
|
|||||||
| stalkerok |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 28.12.2007 Репутация: нет Всего: нет |
Может поможет кто.
|
|||
|
||||
| elvis79 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 13.11.2008 Где: Украина, Ивано-Фр анковск Репутация: нет Всего: нет |
Array -- это массив записей (array of DotRec, array of LinkRec, array of NameGridRec)
Если я правильно понял, то я б организовал через TObjectList. А также создал предка с виртуальными методами и от него породил бы DotRec, LinkRec и NameGridRec. Реализация методов была в каждом предке своя
Реализация
если заинтересует пиши, помогу |
||||
|
|||||
| stalkerok |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 28.12.2007 Репутация: нет Всего: нет |
elvis79 Спасибо!
Насколько я понял всё равно придётся писать для каждого типа данных свою процедуру и эти процедуры будут одинаковые(в моём случае с сохранением массива в файл) а отличаться будут в процедурах только тип используемых переменных, а если типов данных 10 то писать 10 одинаковых процедур? Но если использовать дженерики, там только написать одну процедуру, при вызове которой передавать тип данных? заранее Спасибо! |
|||
|
||||
| NewDima |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
ну и сумбур
звать так:
такой процедуре корми что захочешь, Но мой тебе совет, не используй эти функции:
большие структуры будут долго писаться (пишутся то по байтам), используй CreateFile, WriteFile
как вишь, никакого цикла, скорость большая, но есть ограничение записываемого буфера. использование даже изменять не надо Это сообщение отредактировал(а) NewDima - 17.12.2008, 07:43 |
||||||||
|
|||||||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
-------------------- There are always someone smarter than you... |
|||
|
||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
я дальше код привел, еще раз вставить?=)
найди пять различий а вообще, гибкость и расширенные возможности Это сообщение отредактировал(а) NewDima - 15.12.2008, 16:17 |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
NewDima, не вижу преимущества в приведенном коде. кто виноват, что ты объявил типизированный файл в первом варианте?
-------------------- There are always someone smarter than you... |
|||
|
||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
с типизацией файла начал топикстартер.
рады? Я сторонник WinAPI и его гибкости; Это сообщение отредактировал(а) NewDima - 17.12.2008, 07:50 |
|||
|
||||
| stalkerok |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 28.12.2007 Репутация: нет Всего: нет |
NewDima СПАСИБО!!! то что надо! а как же читать из такого файла? может Поможете дописать эту функцию? и для чего нужен Randomize;?
Это сообщение отредактировал(а) stalkerok - 17.12.2008, 01:38 |
|||
|
||||
| stalkerok |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 28.12.2007 Репутация: нет Всего: нет |
Пробовал так:
но не получается... Это сообщение отредактировал(а) stalkerok - 17.12.2008, 02:34 |
|||
|
||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
лови
Добавлено через 5 минут и 32 секунды
Присоединённый файл ( Кол-во скачиваний: 4 )
figli.rar 1,91 Kb |
|||
|
||||
| stalkerok |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 28.12.2007 Репутация: нет Всего: нет |
NewDima Спасибо! только не пойму почему то не правильно работает.
например сохранил массив длиной 4, а затем при загрузке этого массива его длина = 3876... причем файл всего 4 байта...
вызываю
а если сохранять массив из типа:
вообще вылетает с ошибкой... |
||||||
|
|||||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
читай про статические и динамические массивы.
в твоем случае тебе надо передать указатель не на переменную-массив, а на первый элемент массива в эти функции так же неплохо сохранить длину массива, например, в начале файла. Это сообщение отредактировал(а) MetalFan - 17.12.2008, 11:43 -------------------- There are always someone smarter than you... |
|||
|
||||
| stalkerok |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 28.12.2007 Репутация: нет Всего: нет |
MetalFan не понял это как подскажите пожалуйста.
|
|||
|
||||
| NewDima |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
не
Добавлено @ 15:39 да, как сказал MetalFan, читай теорию и в следующий раз, если хочешь чему-то научиться, то лучше спрашивай не "как?", а "вот так правильно?" и приводи свои додумки, а мы объясним, что правильно и не правильно и почему. Иначе все, что тебе здесь говорят ты забудешь через неделю Это сообщение отредактировал(а) NewDima - 17.12.2008, 15:39 |
||||
|
|||||
| stalkerok |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 28.12.2007 Репутация: нет Всего: нет |
Спасибо Вам, но так и не получается, хотя сделал всё как Вы подсказали:
использование
но, например при сохранении:
загружается
Возможно файл сохраняется не полностью? ведь например вышеприведённый файл занимает 4байта, не мало? Это сообщение отредактировал(а) stalkerok - 17.12.2008, 16:06 |
||||||||
|
|||||||||
| NewDima |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
кидай свой код в аттаче, посмотрю, скажу, что неправильно Добавлено через 8 минут и 4 секунды ой -йой сразу твой код не глянул. Я тебе так скажу: учи основы! и заодно узнай, сколько байт в целом числе, потом поймешь, сколько весит твоя структура, а потом умножишь на размер массива и поймешь, сколько он на самом деле места занимает. Нет слов, одни эмоции никому вот это не показывай:
Это сообщение отредактировал(а) NewDima - 17.12.2008, 16:51 |
||||
|
|||||
| stalkerok |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 28.12.2007 Репутация: нет Всего: нет |
NewDima СПАСИБО!
|
|||
|
||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
пометь тему решеной, так принято
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |