Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
6-16580
Dimman1
2003-12-04 13:02
2004.02.06
Формат пакета MailSlot


3-16036
rika
2004-01-12 15:58
2004.02.06
Как вставить в текстовый файл инфу из БД?


6-16542
Makhanev A.S.
2003-12-05 01:18
2004.02.06
Поиск ServerSocket а...


1-16501
Sergioly
2004-01-27 14:30
2004.02.06
Как запустить дос-прогу без вывода ее окна в Delphi


1-16475
Dest
2004-01-27 13:07
2004.02.06
Перебор символов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский