Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.06;
Скачать: CL | DM;

Вниз

Все равно Делфай не брошу!   Найти похожие ветки 

 
MV   (2004-01-14 15:54) [0]

Как организовать аналог шаблонов в Delphi?
Пример:
-------

type
TRec1 = Record
....
....
end;

type
TDynArray = class (TComponent) // Динамичесий массив с особым поведением
private
FGrid: TRec1;
function GetGrid(const Row, Col: integer): TRec1;
procedure SetGrid(const Row, Col: integer; const Value: TRec1);
public
property Grid[const Row,Col : integer] : TRec1 read GetGrid write SetGrid; default;
...
end;

------------------------
Ну так вот, если другая структура TRec1 - делай Copy/Paste.
Ну просто неприлично как-то, в 2004-то году...

Очень надо! Кроме как в "потрепаться" - похоже - никуда...


 
vidiv ©   (2004-01-14 16:10) [1]

Не очень понял что надо... но думаю можно сделать с помощью variant"а или с помощью указателей...


 
MV   (2004-01-14 16:13) [2]

Не-а, варианты тут не причем, к сожалению.
Насчет указателей - если только нетипизированные - но - загвоздка - надо создавать/убивать экземпляры записи. Конкретного типа.


 
Ломброзо ©   (2004-01-14 16:21) [3]

На Delphilingdom.com статья. Или фокусами с переопределением типа, навроде
type MY_TYPE = type integer;
...
type MY_TYPE = type double;

или извращениями над кодом при помощи всяких там перлов.


 
MV   (2004-01-14 16:23) [4]

Вот блин, хоть на C++ переписывай...


 
Ломброзо ©   (2004-01-14 16:30) [5]

почитал твой вопрос в основной. Ничего тебе не мешает использовать аналоги union в C++. Читай хелп по рекордам.
type
TMyRec = record
case byte of
0:
a: integer;
b: string;
1:
c: double;
d: TDateTime;
end
end;


 
Ломброзо ©   (2004-01-14 16:31) [6]

бегины-энды порасставь, а то я синтаксис подзабыл...


 
MV   (2004-01-14 16:32) [7]

2 Ломброзо © (14.01.04 16:30) [5]
И что, каждый раз создавать запись максимально возможной длины, чтобы все варианты помещались???


 
Ломброзо ©   (2004-01-14 16:37) [8]

Ну да. Или tyt хотите с нами за С++ повоевать? :-)
Ничего страшного я в этом способе не вижу - напротив, для Вашего случая красивее не придумаешь.


 
panov ©   (2004-01-14 16:38) [9]

Непонятен вопрос...


 
MV   (2004-01-14 16:40) [10]

Я не хочу за C++ воевать!
...
Я хочу в Делфай!
...
Я люблю бысрую компиляцию!
...
Я ненавижу header - файлы!
...
Я обожаю виртуальные конструкторы!...
... ...

... я не могу красиво решить простую задачу.


 
Ломброзо ©   (2004-01-14 16:42) [11]

...разве что для строк (кстати) возможна утечка памяти.

Да, кстати. Есть еще
type
TData = object
end

вместо структур. Фактически те же структуры, только с методами.


 
Ломброзо ©   (2004-01-14 16:43) [12]

в т.ч. виртуальными.


 
MV   (2004-01-14 16:43) [13]

2 Ломброзо © (14.01.04 16:42) [11]

Существенно медленнее. Но работает.
Кстати, без методов тоже можно. :)

C Record - быстро!


 
Ломброзо ©   (2004-01-14 16:46) [14]

не class, а object, прошу заметить.

Насчёт "быстро" - вариантов для оптимизации миллион. Иммено для object свободно можно хапать память в пул кусками по, например, 1000-2000 объектов. Создайте класс-менеджер.


 
MV   (2004-01-14 16:50) [15]

2 Ломброзо © (14.01.04 16:46) [14]
Согласен.

...

Надо по одному объекту за раз. Но много раз.


 
Ломброзо ©   (2004-01-14 16:54) [16]

Блин. Ну и пожалуйста. Выделяете экземпляром класса-менеджера пул памяти сразу полгига, обнуляете. Пишете метод GetNewObject: PMyObject. Возвращаете клиенту указатель на начало пула и передвигаете указатель на размер TMyObject и так далее, пока пул не закончится. Если закончился - хапаете ещё полгига. В деструкторе класса-менеджера эти полгига освобождаете. Аллес.

Или Вы ленитесь?


 
MV   (2004-01-14 17:07) [17]

2 Ломброзо © (14.01.04 16:54) [16]
В общем, я с записями так и делал... Только не по пол-гига, а по 16KB. Пробовал бОльшими кусками - не намного эффективнее выходит (в смысле производительности).

Ну это так, к слову...

Думал, может, более красивое решение есть - средствами языка...



Страницы: 1 вся ветка

Текущий архив: 2004.02.06;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.031 c
1-16332
Andrey_Shalin
2004-01-25 05:44
2004.02.06
Потоки


14-16743
NsiSoft
2004-01-15 18:45
2004.02.06
ЧАТ!


1-16490
andrew_p
2004-01-22 13:58
2004.02.06
Перевод MessageDLG


1-16477
Nic2
2004-01-27 14:51
2004.02.06
Инсталляция компонента


14-16687
Да никто и все
2004-01-17 11:30
2004.02.06
Дополнительная нагрузка модераторам веток