Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.05 c
14-1082528376
VID
2004-04-21 10:19
2004.04.11
Как создать загрузочный диск, который будет видеть NTFS ?


1-1082487598
KLAUS
2004-04-20 22:59
2004.04.11
HELp строку из файла с LAbel


1-1080110860
Layner
2004-03-24 09:47
2004.04.11
Помогите отработать действия с TTimer.


3-1079078589
Ломак
2004-03-12 11:03
2004.04.11
Процедура в Firebird


1-1080209431
goliath
2004-03-25 13:10
2004.04.11
Менеджер MP3





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский