Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Форум .::NoWa.cc::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Delphi

Уважаемые пользователи nowa.cc. Мы работаем для вас более 20 лет и сейчас вынуждены просить о финансовой помощи по оплате за сервер.
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: Z021474945171 Webmoney WME: E159284508897 Webmoney WMUSDT: T206853643180
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!

Ответ
 
Опции темы Опции просмотра Language
Старый 05.02.2010, 10:44   #1
Постоялец
 
Пол:Мужской
Регистрация: 17.02.2007
Адрес: Пенза
Сообщений: 240
Репутация: 29
По умолчанию Передача в функцию параметра со многими типамиё

Есть 2 разных объекта с похожими методами, например, O1:Type1 и O2:Type2 (напр., SqlDataset из вкладки DbExpress и Dbf стороннего разработчика)
O1.Add, O1.Value
O2.Add, O2.Value
Как передать в функцию параметр(-ы) с заранее неизвестным типом?Примерно так

Funct(O: Type)
O.Add()
Result := O1.Value

x := Funct(O1)
x := Funct(O2)

Понятно, что можно использовать overload
Funct(O: Type1); overload
Funct(O: Type2); overload
Но это не выход - слишком много разнородных объектов по типам и количеству параметров может быть. Чувствую, что в направлении pointer копать надо. Но вот как? Заранее надеюсь на помощь

PS Извините, если вопрос поднимался, но что-то после многочасового копания в Гугле так и не нашел. Вероятно, руки кривые :-)

Последний раз редактировалось borispnz; 21.07.2010 в 08:23..
borispnz вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама:


Старый 05.02.2010, 12:30   #2
Vasuha
Постоялец
 
Пол:Мужской
Регистрация: 13.03.2008
Адрес: Минск
Сообщений: 257
Репутация: 231
По умолчанию Re: Передача в функцию параметра со многими типамиё

А к примеру:

function TForm1.proba(o: TObject): boolean;
begin
//
if o is TSQLDataSet then
ShowMessage('Обрабатываем TSQLDataSet');
end;
__________________
Vasuha вне форума
 
Ответить с цитированием Вверх
Старый 06.02.2010, 08:28   #3
borispnz
Постоялец
 
Пол:Мужской
Регистрация: 17.02.2007
Адрес: Пенза
Сообщений: 240
Репутация: 29
По умолчанию Re: Передача в функцию параметра со многими типамиё

Цитата:
Сообщение от Vasuha Посмотреть сообщение
А к примеру:

function TForm1.proba(o: TObject): boolean;
begin
//
if o is TSQLDataSet then
ShowMessage('Обрабатываем TSQLDataSet');
end;

Т.е. потом писать нечто вроде
if o is TSQLDataSet then
(o as TSQLDataSet).value
else if o is TDbfDataSet then
(o as TDbfDataSet).value

Так? И чем отличается от overload? И потом - что делать, если передается несколько параметров? Например, Sql и Dbf работают попеременно как источник, так и получатель.
FunctToDbf(SqlSource, DbfTarget)
FunctToSql(DbfSource, SqlTarget)
Именно это примерно мой случай, только еще сложнее
borispnz вне форума
 
Ответить с цитированием Вверх
Старый 13.02.2010, 01:47   #4
Steve Bloom
Пользователь
 
Пол:Мужской
Регистрация: 23.08.2008
Адрес: Москва
Сообщений: 38
Репутация: 7
По умолчанию Re: Передача в функцию параметра со многими типамиё

Цитата:
Сообщение от borispnz Посмотреть сообщение
И потом - что делать, если передается несколько параметров? Например, Sql и Dbf работают попеременно как источник, так и получатель

if (o1 is TSQLDataSet) and (o2 is TDbfDataSet) then FunctToDbf(SqlSource, DbfTarget)
else if (o1 is TDbfDataSet) and (o2 is TSQLDataSet) then FunctToSql(DbfSource, SqlTarget)
Steve Bloom вне форума
 
Ответить с цитированием Вверх
Старый 27.02.2010, 09:44   #5
johnnyboy
Неактивный пользователь
 
Пол:Мужской
Регистрация: 29.05.2007
Сообщений: 10
Репутация: 1
По умолчанию Re: Передача в функцию параметра со многими типамиё

Если сами объекты однотипные (предок один), то зачем изврат?
В твоем примере:
Funct(O: Type)
O.Add()
Result := O1.Value;

Type - Предок обоих классов (только у предка тоже должен быть этот метод, а потомки его наследовать, и все у тебя получится, в случае датасетов - у них общий TDataset, так в функции и пиши:

Function FCount(Dataset: TDataset)
Begin
Result := Dataset.Fields.Count;
End;

F1 := FCount(DbfDataset1);
F2 := FCount(SQLDataset1);
johnnyboy вне форума
 
Ответить с цитированием Вверх
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно чуток доработать(изменить) функцию у скрипта (за деньги) PairGain Веб - Программирование 0 18.02.2009 00:25
Как вызвать функцию, которая присовена переменной SaraTancredi Java Script 1 02.12.2008 13:43
Помогите найти прогу имеющую функцию деформация Факер Просмотр, конверторы и редакторы графики 6 15.04.2008 08:20
как отключить функцию в (пуск-> документы...) mna7421 Windows XP 5 06.04.2008 16:37
Проблема тех. характера со многими играми Amr Помощь по играм 5 10.09.2006 12:22

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 08:39. Часовой пояс GMT +3.


Copyright ©2004 - 2026 NoWa.cc

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.04368 секунды с 11 запросами