Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как вставить элемент внутрь массива рекордов ? [D7]


Страницы:   1 2

Кто---то ©   (2004-11-15 01:40:00) 

Задумал написать функцию, которая бы вставляла элементы в массивы ЛЮБЫХ рекордов, но запнулся на том, как её озаглавить :
function InsertRec(anArray : array of ... ; Index : Integer): Boolean;

array of что ? array of record не получается. А как быть ? Мне же надо, чтобы не под какую то конретную рекорду, а чтобы универсально было. Как же написать тогда ?

Когда мы пишем :
function InsertRec(var anArray : array of ...
Мы разве не просто ссылку на массив передаём ? И если ссылку, то какая Дельфи разница на массив чего ведёт эта ссылка ?

А если передаём не только ссылку, то что именно ещё передаём ?

Подробности см в теме :
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1100211902&n=0

Если тема закрыта потому, что этот вопрос слишком сложен для мастеров - то так и скажите, чтобы я зря не спрашивал. Всего не знает никто, кроме Бога, ничего в этом постыдного нет.


GuAV   (2004-11-15 02:45:00) [21]

О чём вообще речь ?
если о type TRecord=class ..., как в той ветке то реализовать в принципе можно.

в случае же type TMyRec=record... весьма затруднительно... проще согласится с тем что никак.


dhdd   (2004-11-15 02:45:00) [22]

function InsertRec(anArray:pointer;index,recsize:integer):Boolean; -> А чего вставлять? и нужна ли функция.
function InsertRec(anArray,rec:pointer;index,recsize:integer):Boolean;
В массив по адресу anArray со смещением index*recsize помещаем содержимое rec размером recsize: дальше по ассемблеру для оптима.


Кто---то   (2004-11-15 02:41:00) [23]


> GuAV ©   (15.11.04 02:34) [3]
> PS: рекомендую ещё раз перечитать [1].

Но мне нужно решение в рамках Дельфи. Ответ "отказаться" - не подходит.

Макросов в Дельфи вроде нету. По крайней мере раньше небыло. :)
Использовать процедуру или функцию - нельзя. Как же быть ? Каждый раз вписывать этот блок из пяти строчек что ли ? Это неудобно. Хотелось бы этого избежать.


GuAV   (2004-11-15 02:34:00) [24]

I say again:
от открытых массивов прийдётся вообще отказаться, т.к. изменить размер отрытого массива внутри процедуры невозможно, т.к. статический массив тоже может быть актуальным параметром, там где формальный открытый массив.

Для справки: array of xxx в параметре - это и есть "открытый массив".

PS: рекомендую ещё раз перечитать [1].


Кто---то   (2004-11-15 02:31:00) [25]


> GuAV ©   (15.11.04 02:06) [1]


Вот моя функция :

function InsertRec(var anArray : array (??? Что сюда вписать ???) ; Index : Integer): Boolean;
var
 i, j : Integer;
begin
 j      := Length(anArray);
 Result := (Index > 0) and (Index < j));
 if not Result then break;
 SetLength(anArray, j +1);
 for i := j +1 downto Index +1 do anArray[i] := anArray[i -1];
end;


Дело за малым. Угадать слово. Или несколько. :) Как бы ты решил этот кроссворд ?


GuAV   (2004-11-15 02:06:00) [26]

Кто---то ©   (15.11.04 1:40)
Когда мы пишем :
function InsertRec(var anArray : array of ...
Мы разве не просто ссылку на массив передаём ?


не совсем. открытый массив всегда передаётся двумя параметрами: ссылкой на первый элемент и количеством элементов минус один. и кстати на самом деле программера не должно волновать как он передается.

Кстати учитывая сабж от открытых массивов прийдётся вообще отказаться, т.к. изменить размер отрытого массива внутри процедуры невозможно, т.к. статический массив тоже может быть актуальным параметром, там где формальный открытый массив.

Динамические массивы тоже не подойдут, т.к. в этом случае типы формального и фактического параметра должны совпадать, что не позволит реализовать универсальность.

в случае классов можно всё же наверное передавать untyped параметр или указатель на массив, приводя его в процедуре к дин. масиву указателей.

в случае именно записей всё гораздо сложнее...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо