powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Можно ли восстановить тип по объявленной переменной?
7 сообщений из 32, страница 2 из 2
Можно ли восстановить тип по объявленной переменной?
    #39546555
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyOrenЯ подозревал, что задача решается ч/з RTTI,Какой RTTI, если Вам нужно явно указать нужный тип?
X-Cite
Код: pascal
1.
procedure TForm7.Test<T>(var aSample);
...
Рейтинг: 0 / 0
Можно ли восстановить тип по объявленной переменной?
    #39546687
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Какой RTTI, если Вам нужно явно указать нужный тип?
Вся соль в том, что он знает какой тип будет...
Согласно его постановке у него есть
Код: pascal
1.
2.
3.
var
  Sample1 : Class1;
  Sample2 : Class2;


И где то он будет вызывать
Код: pascal
1.
InitSample(Sample1)


т.е. в этом месте в коде он уже знает что передает переменную Class1. Т.е. что мешает вызывать
Код: pascal
1.
InitSample<Class1>(Sample1, делегат на конструктор);
...
Рейтинг: 0 / 0
Можно ли восстановить тип по объявленной переменной?
    #39546768
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteТ.е. что мешает вызывать
Код: pascal
1.
InitSample<Class1>(Sample1, делегат на конструктор);

Что мешает вызвать
Код: pascal
1.
Sample := Class1.Create(...)

?
...
Рейтинг: 0 / 0
Можно ли восстановить тип по объявленной переменной?
    #39546782
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite
Код: pascal
1.
procedure TForm7.Test<T>(var aSample);

И, кстати, при наличии виртуального конструктора есть более простой способ

Код: pascal
1.
2.
3.
4.
5.
6.
function TForm7.Init<T: TMainClass>(var ASample: T): T;
begin
  if ASample = nil then
    ASample := T(TMainClassClass(T).Create(...));
  Result := ASample;
end;

но это, опять таки, требует явного указания типа
...
Рейтинг: 0 / 0
Можно ли восстановить тип по объявленной переменной?
    #39547274
SergeyOren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_Что мешает вызвать
Sample := Class1.Create(...)?

Сейчас так и вызываю, просто классов около 2-х
десятков, они описывают устройства в эксп. установке. Установка решает разные задачи (иногда одновременно), устройства нужны не во всех задачах и даже не на всех этапах одной задачи. Для экономии по возможности я деинициализирую отработавшие в задаче устройства. Беда в том, что господа Пользователи регулярно заставляют меня программировать новые задачи и я просто устал следить за состоянием устройств. Вот и подумал, что если тип устройства уже объявлен, то у компилятора д.б. способ подставлять его в нужном месте. Судя по развитию темы, это слишком оптимистично
...
Рейтинг: 0 / 0
Можно ли восстановить тип по объявленной переменной?
    #39547525
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyOren,

Может Вам нужна такая схема?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
TMyClass = class
private
  FSample1: TSample1;
  FSample2: TSample2;
  ........
  FSampleN: TSampleN;
private
  function GetSample1: TSample1;
  function GetSample2: TSample2;
  ........
  function GetSampleN: TSampleN;
public
  destructor Destroy; override;
public
  property Sample1: TSample1 read GetSample1;
  property Sample2: TSample2 read GetSampleN;
  ........
  property SampleN: TSampleN read GetSampleN;
end;

function TMyClass.GetSample1: TSample1;
begin
  if FSample1 = nil then
    FSample1 := TSample1.Create(.......);
  Result := FSample1;
end;

function TMyClass.GetSample2: TSample2;
begin
  if FSample2 = nil then
    FSample2 := TSample2.Create(.......);
  Result := FSample2;
end;
......................
function TMyClass.GetSampleN: TSample1;
begin
  if FSampleN = nil then
    FSampleN := TSampleN.Create(.......);
  Result := FSampleN;
end;

destructor TMyClass.Destroy; override;
begin
  FSample1.Free;
  FSample2.Free;
  .............
  FSampleN.Free;
  inherited Destroy;
end;

var
  MyObj: TMyClass;
begin
  MyObj := TMyClass.Create(....);
  try
    MyObj.Sample3.DoSomething;
  finally
    MyObj.Free;
  end;
end;

...
Рейтинг: 0 / 0
Можно ли восстановить тип по объявленной переменной?
    #39547565
SergeyOren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_Может Вам нужна такая схема?

Большое спасибо, буду завтра разбираться, т.к. у нас уже поздно - пора в стойло.
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Можно ли восстановить тип по объявленной переменной?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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