Главная страница
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.037 c
3-16062
_sulent
2004-01-12 14:08
2004.02.06
Помогите народ, пожалуйста


14-16636
RealRascal
2004-01-14 17:18
2004.02.06
Надпись на батоне в несколько строк


14-16590
RealRascal
2004-01-15 01:23
2004.02.06
50гц


1-16354
Navi
2004-01-21 19:08
2004.02.06
Отображение полос прокрутки в StringGrid-е


1-16493
Anton.
2004-01-27 16:01
2004.02.06
Классы