Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Передача структуры параметром в функцию   Найти похожие ветки 

 
guest_2004234   (2004-03-24 11:44) [0]

Привет All.
Возник вот какой вопрос, нужно передать параметром функции название структуры и её поле(по номеру - чтобы можно было в цикле заполнять поля)
"поля у структуры разных типов

Ну примерно вот так:
function Filter(NameOfStruct: ????; NumberOfField: ????):string;

С именем структуры понятно - можно сделать что-то типа
TStructs = (TSruct1, TSruct2 ... TStructN) и передавать её в качестве параметра. Но как програмно определить её поле - загадка.

Может кто что подскажет.


 
Тимохов ©   (2004-03-24 11:47) [1]

структура то какая?


 
Zergling ©   (2004-03-24 11:51) [2]

А я вобще не вьехал в суть вопроса
Можно разжевать?


 
Smithson ©   (2004-03-24 11:53) [3]


type
 TStruct = record (или class)
   ...
   ...
 end;

 Function Filter (NameOfStruct: TStruct)


 
Курдль ©   (2004-03-24 11:56) [4]

Не т понятия "НАЗВАНИЕ СТРУКТУРЫ". Это для Вас оно название, а для программы - адрес в памяти.
А что есть "СТРУКТУРА" для принимающей ф-ции? Указатель просто-напросто. И какие могут быть проблемы? Задумайтесь над сутью вещей! Ведь нельзя всю жизнь прожить с уверенностью, что ветер дует оттого, что деревья качаются!


 
guest_2004234   (2004-03-24 12:08) [5]

Я наверно не так выразился
Есть определённый набор структур (несколько различных), написана функция
В эту функцию нужно одним из параметров передать имя структуры,
а вторым - номер поля.

Для принимающей функции NameOfStruct - указатель на структуру, которую использовать, а NumberOfField - порядковый номер поля.


 
Романов Р.В. ©   (2004-03-24 12:10) [6]

А просто поле нельзя передать?


 
Digitman ©   (2004-03-24 12:17) [7]

откажись от структур в пользу классов - наследников TPersistent

RTTI тебе поможет


 
guest_2004234   (2004-03-24 12:20) [8]

Например

PStruct2 = ^TSruct2
TSruct1 = record
 field1: integer;
 field2: string;
end;

PStruct2 = ^TSruct2
TSruct2 = record
 field1: string;
 field2: double;
end;

function Filter(NameOfStruct: pointer; NumberOfField: byte):string
begin
//здесь что-то типа из NameOfStruct возвращать поле номер NumberOfField
end;

Procedure BeginF();
var
 STRUCT1 : PSTruct1
 STruct2 : PStruct2
 N1: Byte
begin
 N1:=1;
caption := Filter(Struct1, N1); //вернёт Struct1^.Field2
 N1:=0;
caption := Filter(Struct2, N1); //вернёт Struct2^.Field1


 
Курдль ©   (2004-03-24 12:22) [9]


> Есть определённый набор структур (несколько различных),
> написана функция
> В эту функцию нужно одним из параметров передать имя структуры,
> а вторым - номер поля.


А нельзя свести "набор структур", например, к массиву структур?


 
Романов Р.В. ©   (2004-03-24 12:33) [10]

Какая то неправильная организация хранения данных :(



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.039 c
1-1080048729
infom
2004-03-23 16:32
2004.04.11
вертикальная надпись


3-1079506394
Igor G
2004-03-17 09:53
2004.04.11
Install BDE


11-1068434085
azsd
2003-11-10 06:14
2004.04.11
ptWYSIWIG = ptWYSIWIGCustom?


1-1082464357
V l a d i m i r
2004-04-20 16:32
2004.04.11
Исключительная ситуация Try ... except


7-1079601360
Batoon
2004-03-18 12:16
2004.04.11
Как перезагрузить ЛЮБУЮ винду???