Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дженерик в строку 
:(
    Опции темы
Keeper89
Дата 31.7.2010, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



А как? Код что я привел выше для for не работает.


--------------------
PM MAIL WWW   Вверх
RomanEEP
Дата 31.7.2010, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: 1
Всего: 8



Я бы решил проблему так:
Код

TCoefficientList<T> = class
  strict private
    FValues: array of Variant;

PM MAIL   Вверх
Keeper89
Дата 31.7.2010, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



RomanEEP, избавитья от проблемы -это не решить ее, так дженерики не нужны совсем.

надеюсь, что bems подскажет, как присвоитъ значение в моем случае smile

Это сообщение отредактировал(а) Keeper89 - 31.7.2010, 22:51


--------------------
PM MAIL WWW   Вверх
RomanEEP
Дата 1.8.2010, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 424
Регистрация: 18.5.2006
Где: Коломна

Репутация: 1
Всего: 8



Как так генерики не нужны - у тебя класс будет генерик, все методы и свойства у него будут с твоим типом <T>.
Код

FValues: array of Variant;
 определяет как класс внутри себя хранит данные. Причем до этого никому из пользователей твоего класса дела не должно быть.
Зато работать с ними будет удобно (за это придется поплатиться увеличением объема хранимых данных, но это будет иметь значения только в исключительных случаях)

Я думаю, что ты несомненно решишь задачу тем методом, которым идешь, но полученный код 
1)сильно подвержен ошибкам (компилятор никак не может проверить правильность кода)
2)трудно переносить и трудно сопровождать
3) и зачем оно надо?
PM MAIL   Вверх
bems
Дата 1.8.2010, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Код

procedure TKList<T>.Invert;
var
  i: Integer;
  Val: TValue;
begin
  if PTypeInfo(typeinfo(T)).Kind in [tkInteger, tkInt64]
     then for i := 0 to High(FItems) do
            begin
            Val := TValue.From<T>(FItems[i]);
            FItems[i] := TValue.From<Int64>(-Val.AsOrdinal).AsType<T>
            end
     else for i := 0 to High(FItems) do
            begin
            Val := TValue.From<T>(FItems[i]);
            FItems[i] := TValue.From<Extended>(-Val.AsExtended).AsType<T>
            end;
end;

Как-то так. Не проверял

Это сообщение отредактировал(а) bems - 1.8.2010, 07:43


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Keeper89
Дата 3.8.2010, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Спасибо, работает.

А если делать для своего типа, в котором есть процедура Invert? Так не получается:
Код

for i := 0 to FItems.Count - 1 do
      begin
        Val := TValue.From<T>(FItems[i]);
        FItems[i] :=
        TValue.From<TCoefficientRecord>(
          Val.AsType<TCoefficientRecord>.Invert).AsType<T>;
      end;




--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0649 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.