Главная страница
    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.46 MB
Время: 0.044 c
1-1079966087
Юкс
2004-03-22 17:34
2004.04.11
Проверка строки на число


7-1080053468
dmytro
2004-03-23 17:51
2004.04.11
Запуск от имени


1-1079449014
Александр1
2004-03-16 17:56
2004.04.11
Работа с Exсel?


3-1079002259
СержК
2004-03-11 13:50
2004.04.11
Можно ли устанавливать InterBase на MSSQL server 2003 ?


1-1079952463
Dimbas
2004-03-22 13:47
2004.04.11
TWebBrowser и cursor





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