Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 17.07.2015, 16:39   #11
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
А что-нибудь типа этого
этот вариант у меня есть изначально. прочитай сабж ещё раз.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума
Старый 17.07.2015, 16:51   #12
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
этот вариант у меня есть изначально. прочитай сабж ещё раз.
Иначе никак. Delphi строго типизирован в этом плане.

Вы можете хранить некую абстракцию T, но вызывать из неё ничего нельзя. Без сравнений и приведений типов по крайней мере.

Код:
  function create(what:T):T;
begin
  if T is TOne then
  REsult := T(TOne(T).Create);
end;
типа такого...

ах да, все это в враппере типа этого:
Код:
type
  generic TAbsClass<T> = class
  class function create(what:T):T;
  end;
чтобы делать так:
Код:
  var one:TOneClass;
  var duo:TDuoClass;
  one := TAbsClass<TOneClass>.Create(TOneClass);

Последний раз редактировалось Человек_Борща; 17.07.2015 в 16:56.
Человек_Борща вне форума
Старый 17.07.2015, 16:53   #13
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,774
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
чтобы функция возвращала сразу объект нужного класса, а не его класса-предка.
Для этого нужна обобщенная функция, а сам тип может быть обычным.
Vapaamies вне форума
Старый 17.07.2015, 17:27   #14
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Для этого нужна обобщенная функция, а сам тип может быть обычным.
я про это и спрашивал в первом посту. К концу рабочего дня мозг устал думать, дай, думаю, братву спрошу, авось кто примером поделится.

У меня есть книжка вот такая. Посмотри стр. 44+.
Изображения
Тип файла: jpg 280525.jpg (80.2 Кб, 115 просмотров)
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума
Старый 18.07.2015, 06:26   #15
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,774
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
я про это и спрашивал в первом посту.
Если забанить на этом форуме флудеров (включая некоторых модераторов) отвечать по существу будет намного проще.

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Задача: заменить метод на что-то подобное:
Код:
function TAbstractOption.NewChildOption<T>(const AName: string [; другие нужные параметры]): T;
begin
  Result:= ....Create();
end;
С точки зрения теории речь идет о фабрике класса, причем об обобщенной фабрике класса, умеющей инициализировать объект произвольным набором параметров. В СУБД аналогичная задача -- превращение строки в таблицу, решается оператором unpivot. В Канторе фабрика класса встроена в язык.

Ну, а если вернуться в грешный Delphi, придется или передавать параметры через открытый массив, или же городить отдельный класс. А, нынче мо(д,ж)но еще лямбду передавать для инициализации только что созданного класса. Для открытого массива нужно предусмотреть конструктор, принимающий его в качестве параметра.
Vapaamies вне форума
Старый 18.07.2015, 08:33   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Просто перечисление TOptionKind со временем распухнет до over9000 значений, так что хотелось бы выкинуть case.
Я, как консерватор, не парился бы по этому поводу.
I'm learning to live...
Stilet вне форума
Старый 18.07.2015, 11:33   #17
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Если забанить на этом форуме флудеров (включая некоторых модераторов) отвечать по существу будет намного проще.
согласен.
Цитата:
причем об обобщенной фабрике класса, умеющей инициализировать объект произвольным набором параметров
тут ты меня не понял, сорри, наверное, я сам ввёл тебя в заблуждение текстом "[; другие нужные параметры]", под которым я имел в виду не открытый массив, а просто набор нужных мне параметров конструктора, которые решил просто опустить в тексте вопроса.

Мне просто нужен (был) конструктор переменного типа, который можно бы было юзать без приведения типов. Оказалось, что не всё так просто.

Цитата:
Я, как консерватор, не парился бы по этому поводу.
Не согласен!
Надо осваивать новые технологии. Вижу на работе каждый день программистов-консерваторов, застрявших в 90-х, а то и в 80-х, с полным отосутствием желания юзать ООП (нас тут не стояло), и умеющих только по формам пасьянсы из компонентов раскладывать и писать обработчики button100500click(TObject* Sender) с вот таким кодом внутри:
Код:
if (a==1)||(a==2)||(a==3)||(a==4).....||(a==100500) b=false;
else b=true;
Со всей ответственностью заявляю: НЕ НАДО ТАК!!!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось Stilet; 18.07.2015 в 12:09.
min@y™ вне форума
Старый 18.07.2015, 12:34   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Надо осваивать новые технологии.
Не, ну ты конечно прав, но спешить ИМХО не мой конек ))
Цитата:
Со всей ответственностью заявляю: НЕ НАДО ТАК!!!
Со всей ответственностью оффтоппопарирую: Такое может написать каждый, тобишь лишь все )
И кстати мну как консерву такой код тоже мутит, и я не знаю ни одного из старой школы проггера, с кем я знаком, кто бы писал такое.
А вот новичков таких знаю. Причем лично.
I'm learning to live...
Stilet вне форума
Старый 18.07.2015, 13:00   #19
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Такое может написать каждый, тобишь лишь все )
это вам не это.
Цитата:
Такое может написать каждый, тобишь лишь все )
И кстати мну как консерву такой код тоже мутит, и я не знаю ни одного из старой школы проггера, с кем я знаком, кто бы писал такое.
А вот новичков таких знаю. Причем лично.
И что это значит?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума
Старый 18.07.2015, 13:07   #20
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
И что это значит?
То, что ты сказал: Быдлокод типа
Код:
if (a==1)||(a==2)||(a==3)||(a==4).....||(a==100500) b=false;
else b=true;
Могут написать не только прогеры из старой школы, а и мегапродвинутые дэвэлопни из современной молодежи, которые 90-е не видели.

P.S. Но это не важно. Это оффтоп.
I'm learning to live...
Stilet вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать из числа типа real число типа integer? gylayko Помощь студентам 6 15.09.2012 11:41
Возможно ли в массив типа char записать первым элементом значение переменной типа float? Green Gin Общие вопросы C/C++ 2 05.12.2011 01:50
Каким образом сохранить цвет. Типа в переменную типа TColor ? serres C++ Builder 5 07.12.2010 16:19
С++ (конструктор, деструктор, копирующий конструктор) Jane-sad Помощь студентам 2 01.10.2010 10:01
Запись числа типа инт в ячейку двумерного массива типа char AxenicX Помощь студентам 1 25.09.2009 00:35