powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Аналог шаблонов в Delphi.
25 сообщений из 25, страница 1 из 1
Аналог шаблонов в Delphi.
    #32375839
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, возможно, для Вас совершенно дурацкий вопрос:
- имеется класс, активно юзающий одно из своих свойств типа Record (какой-то структуры).
- все нормально, но нужен такой же класс, у которого это свойство типа Record bvttn совершенно другую структуру.
- дело решается позорным методом "copy-paste".
Понадобилось еще два класса. И возможно, потом еще два.
Теоретически возможно вместо Record использовать объекты, но, как выяснилось, фактически при активном создании-удалении элементов типа Record время тратится гораздо меньшее, чем при создании экземпляров класса.
Так вот вопрос: есть ли в Delphi какая-либо альтернатива шаблонов C++; или более локально - можно ли использовать структуры типа Record, если заранее не известно содержание Record. Внутри класса к полям записи не обращаюсь (только создание и удаление)

???????????????????????
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32375906
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зоздавай abstract классы...
в наследниках просто переопределишь типы и т.п.
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32375934
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как реализовать абстакции?
Пример:
-------

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-то году...

Как?
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32375935
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В наследниках переопределять типы?
В Delphi??
Как???
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32375943
Фотография Luchkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а указатель вместо конкретного рекорда если хранить?
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32375948
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, внутри класса создаются/убиваются экземпляры записи. В принципе, для этого достаточно и указателя. Но на конкретный тип (или хотя бы на тип с такой же длиной!)! Никак не выкрутиться...
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32375957
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну емое ...
ну определи память для своих типов и ходи потом туды - храни и извлекай все что надо.
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32375962
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Типа - определить (ну, например, конструкторе), вызов метода GetRecordSize?
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32375994
Фотография Luchkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно и конструктор с параметром - размер - сделать, наверное...
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32375998
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть, как всегда - прощай, безопасность?
Хоть на C++ переписывай, чтоб она сдохла...
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32376038
Фотография Luchkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не понял. туплю, что-ли? чего "безопасность"?
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32376049
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да это, похоже, я туплю... Зациклился на хваленой Дельфийской безопасности типов до паранойи...
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32376164
Фотография Luchkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не трудно привести ещё примерный код вот этого: "Ну, внутри класса создаются/убиваются экземпляры записи"?
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32376174
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... := New(PTRec1); // где PTRec1 = ^TRec1
...
Dispose(...)
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32376191
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
class Rec {};

class Rec1 {};
class Rec2 {};

TDynArray
{
private 
TRec *FGrid; 

public:
Rec GetGrid(int Row, int Col);
void SetGrid(int Row, int Col, Rec *Value);
};

Вот, правда на C++, код без шаблонов
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32376194
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все - пора дамой...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class Rec {};

class Rec1: Rec {};
class Rec2: Rec {};

class TDynArray
{
private 
TRec *FGrid; 

public:
Rec GetGrid(int Row, int Col);
void SetGrid(int Row, int Col, Rec *Value);
};
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32376197
Фотография Luchkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
type 
TDynArray = class (TComponent) // Динамичесий массив с особым поведением 
private 
FGrid: pointer; 
function GetGrid(const Row, Col: integer): pointer; 
procedure SetGrid(const Row, Col: integer; const Value: pointer); 
procedure NewGrid; virtual;
procedure KillGrid; virtual;
public 
property Grid[const Row,Col : integer] : pointer read GetGrid write SetGrid; default; 

... 
end;

а хде-то дальше
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
type 
TMyRec = record ..... end;
PMyRec = ^TMyRec;
TDynSuperArray = class (TDynArray) // Динамичесий массив с очень особым поведением 
private 
public
   procedure NewGrid; override;
   procedure KillGrid; override;
...
end;


procedure TDynSuperArray.NewGrid;
begin
.... New(PMyRec)
end.



ну и далее в том же духе... не пойдёт?
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32376211
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Luchkin Dmitry

Вообще-то так делать не надо - тот же VC6 на это бы сказал что-то типа

Код: plaintext
1.
TDynSuperArray hides virtual function declared in TDynArray


Во-вторых а чем это поможет?
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32376224
Фотография Luchkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чем поможет? уж не знаю... но идея, вроде, такая: один раз описывается класс, который работает с указателями; автор сказал, что тут же экземпляры создаются/удаляются, поэтому то, что создаёт/удаляет выносим отдельно и у наследников переписываем.
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32376247
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как работать с таким классом? ведь информации о типе не будет?!
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32376255
Фотография Luchkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
там, где работают с экземпляром класса уже известен конечный тип (как я понял). (Это где и определны методы создания/удаления).
Ну и работать там с указателем через приведение к указателю на тип
типа так: (хде-то дальше)
Код: plaintext
1.
PMyRec(Grid[ 1 , 1 ])^.knownfield:=...
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32376258
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. потребуется все равно переписать все методы класса и везде поставить приведение типа?
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32376272
Фотография Luchkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не-а. класс работает только с указателями, а тот, кто его использует, приводит к уже известному типу указатель на рекорд
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32376563
koff4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неплохая реализация функционала шаблонов описана здесь:
http://www.realcodg.net/index.php?articles&id=420
...
Рейтинг: 0 / 0
Аналог шаблонов в Delphi.
    #32376564
koff4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sorry, предыдущая ссылка неверная, правильная вот:
http://www.realcoding.net/index.php?articles&id=420
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Аналог шаблонов в Delphi.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]