Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Массив типов

Автор: sheka 24.02.2011 20:27

В зависимости от ситуации переменную сделать нужного типа. Как можно это сделать?

Автор: TarasBer 24.02.2011 20:57

type UberType = record
case kind:byte of (
0: b: byte;
1: w: word;
2: i: integer;
3: s: string[31];
// и так далее...
);
end;

Автор: sheka 24.02.2011 22:13

Не могу сформулировать правильно, но это чуть не то. Вот смотри, допустим есть http://forum.pascal.net.ru/index.php?showtopic=27801&hl=. В зависимости от нажатой клавиши хочу создать объект нужного типа. Можно ли эти типы как-то загнать в массив и потом просто по индексу создать объект? Или ничего не остается как делать обыкновенный кейс от нажатой клавиши?

Автор: volvo 24.02.2011 23:01

А тебе в любом случае придется делать Case, хотя бы для определения, какая клавиша нажата. Так чего огород городить? В этом же кейсе в зависимости от кода нажатой клавиши создавай объект нужного типа.

Автор: volvo 24.02.2011 23:58

P.S. Можешь также заглянуть вот сюда:
http://www.felix-colibri.com/papers/oop_components/delphi_virtual_constructor/delphi_virtual_constructor.html - в FPC оно тоже доступно. Пункт 2.3 будет представлять для тебя интерес smile.gif

Автор: sheka 25.02.2011 0:57

Жаль что только с классами такое возможно.

Автор: volvo 25.02.2011 1:51

Кури http://ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%B1%D1%80%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%28%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29, может быть удастся сделать и с объектами, если очень надо. Но я бы не стал изобретать уже изобретенное...

Автор: -TarasBer- 25.02.2011 2:43

А чем плохи вариантные поля? Я вот на полном серьёзе их использовал в движке, там каждый объект мог быть и стеной, и комнатой, и оружием, и монстром.

Вот только контроля за дискриминантом очень не хватало.

Автор: -TarasBer- 25.02.2011 2:44

Шрифт 7го размера - это самый большой, оказывается?!
Модераторы, исправьте, я имел в виду мелкий еле видный текст.