Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.29;
Скачать: CL | DM;

Вниз

Этика классов и сортировка TList...   Найти похожие ветки 

 
tunguss ©   (2005-06-06 16:29) [0]

Значит так. Если кто знает программку Seqoia - примерно поймет - некоторые данные распологаются на некотором двумерном поле упорядочено по размеру вверх и вниз (алгоритм TreeMap разработанный в Массачусетском университете). Далее поймет тот, кто знаком с MFC. Концепция написания программы такова, что используется модель (aka документ) и представление (aka вьюха). В модели данные представлены некоторыми Item"ами, а во вььюхе эти итемы обернуты некоторыми Plate"ами - впрочем последнее не важно.
Модель наследник TObjectList.

Сейчас я делаю поддержку группировки.

Для этого я создаю наследника Item"a и называю его ItemGroup. От родителя он наследует методы типа GetValue - но вычисляет он уже не значение одного Item"а, а всей группы. И у него свой TList, который содержит Item"ы.

Итак. Хочется чтобы присобаченная к модели функция сортировки (см. TList.Sort) могла работать и с данными групп. Но ввиду ограниченний передаваемой в параметре функции определения соответствия - не удается ни получить от модели информацию, группируем мы что-то или нет, ни на основе этого сделать нужное приведение типов.

Есть ли выход обойти ограничения?

Вот так. Ниже буду объяснять подробнее если что.


 
VladimirB ©   (2005-06-06 16:35) [1]

Вообщем вот.
TParent=class
function MMM:String; virtual;
end;
TChild=class(TParent)
function MMM:String; override;
end;
TChild2=class(TParent)
function MMM:String; override;
end;

var
 Form1: TForm1;

implementation

{$R *.dfm}
{ TChild2 }
function TChild2.MMM: String;
begin
   result:="TChild2.MMM";
end;
{ TChild }
function TChild.MMM: String;
begin
   result:="TChild.MMM";
end;
{ TParent }
function TParent.MMM: String;
begin
   result:="TParent.MMM";
end;

procedure XXX(Item:Pointer);
begin
   ShowMessage(TParent(Item).MMM);
   if    TParent(Item) is TChild then   ShowMessage("!!!");
   if    TParent(Item) is TChild2 then   ShowMessage("222");

end;

procedure TForm1.Button1Click(Sender: TObject);
var x:TChild2;
begin
   x:=TChild2.Create;
   XXX(X);
   x.Free;
end;

Соответственно в XXX можно вызвать виртуальный метод, узнать к какому классу относится item, о парится дальше.
Это к вопросу о том как узнать в Sotr что ей передали.


 
tunguss ©   (2005-06-06 16:47) [2]

Премного благодарен. Кажется именно то, что мне нужно. Не сообразил, что можно так....



Страницы: 1 вся ветка

Текущий архив: 2005.06.29;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.027 c
4-1114577998
bobah
2005-04-27 08:59
2005.06.29
Невидимый курсор мыши


1-1118307829
YoungPioneer
2005-06-09 13:03
2005.06.29
как узнать видимую часть Canvas (DC)


14-1117780745
QuasiLamo
2005-06-03 10:39
2005.06.29
PHP


14-1117132827
Копир
2005-05-26 22:40
2005.06.29
Нарушение авторских прав. Гомер. Одиссея.


6-1110568217
Bailey
2005-03-11 22:10
2005.06.29
pereslat record cheres UDP indy 10





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский