Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Стек в Delphi.

11K
23 апреля 2005 года
master2561
1 / / 23.04.2005
Как в DElphi можно записывать и доставать из стека числа типа real и integer. Ибо с TObjectStack неполучилось записывать real. Просьба и спользование динамических массивов не предлагать.
10
24 апреля 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by master2561
Ибо с TObjectStack неполучилось записывать real. Просьба и спользование динамических массивов не предлагать.


Переходи на .NET. :D :D :D

А если серьезно, предлагаемое решение уже реализовано в .NET - там все типы являются классами, просто некоторые из них могут быть представлены сразу значениями, как System.Integer, например.

Короче, если хочешь пользоваться именно TObjectStack, придется превратить значения типа real в классы, описав что-то вроде:

 
Код:
TReal = class
private
  FValue: Real;
public
  property Value: Real read FValue write FValue;
end;
7.7K
24 апреля 2005 года
Elder386
38 / / 06.04.2005
Цитата:
Originally posted by Freeman
Короче, если хочешь пользоваться именно TObjectStack


Зачем это? Помоему TList – вполне подходит для этих целей!

10
24 апреля 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Elder386
Зачем это? Помоему TList – вполне подходит для этих целей!


SizeOf(Real) проверял или как?

7.7K
24 апреля 2005 года
Elder386
38 / / 06.04.2005
Цитата:
Originally posted by Freeman
SizeOf(Real) проверял или как?


Вы имеете ввиду, что раз у него размер 6 байт, то указатели истользовать глупо?
Вообще, я TList использую обычно для удобства, вместо всяких-там массивов. В Пасе раньше приходилось такие штуки самому писать (двухсвязные списки), а теперь - M : TList, и все проблемы!
Я так думаю, что обращение к информации через свойства работает медленнее, чем к обычным массивам(или к чему-нибудь еще).

10
24 апреля 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Elder386
Вы имеете ввиду, что раз у него размер 6 байт, то указатели истользовать глупо?
Вообще, я TList использую обычно для удобства, вместо всяких-там массивов. В Пасе раньше приходилось такие штуки самому писать (двухсвязные списки), а теперь - M : TList, и все проблемы!


Если быть до конца точным, при настройках компилятора по умолчанию не шесть байт, а 8 (Real = Double).

Во-вторых, для использования TList требуется написание некоторого дополнительного кода по выделению и освобождению памяти, что делает это решение не таким гибким, как хотелось бы. Для полного решения проблемы надо разработать класс-наследник TList, выделяющий и освобождающий память автоматически, как сделал это я в своем TItemList. Самое интересное, что все необходимое для этого в TList уже есть, надо только перекрыть один метод! Не позаботились в Borland о программистах в этом месте...

В-третьих, TList для предложенной задачи может оказаться непригодным, если нужен действительно стек. TObjectStack - это именно стек, имеющий методы Push и Pop.

Ну, а в четвертых - это уже флуд, не отосящийся к поставленной теме.

10
24 апреля 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Freeman
Для полного решения проблемы надо разработать класс-наследник TList, выделяющий и освобождающий память автоматически, как сделал это я в своем TItemList.


Кстати, могу поделиться, если кому надо.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог