Форум: "Потрепаться";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
ВнизВсе равно Делфай не брошу! Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.026 c