Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Jacek Marcin Jaworski Newsgroups: pl.comp.programming,pl.comp.lang.c Subject: =?UTF-8?Q?Jakie_s=C4=85_dobre_zasady_programowania_program=C3=B3w_o?= =?UTF-8?Q?partych_na_wtyczkach=3F?= Followup-To: pl.comp.programming Date: Sat, 3 Feb 2024 05:51:13 +0100 Lines: 42 Message-ID: Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Trace: individual.net 97PiEf9CG18p+Iadf/6BJgv8cx4r5804RJs5WAiPE5hoDlfVKm Cancel-Lock: sha1:t8VLZhhsozt1wDkWxeKvmXP85HA= sha256:V8lwZ+MwU7y5X0EDXrAhsbXcuQrDk+9VbIAjNhpJouc= User-Agent: Mozilla Thunderbird Content-Language: pl-PL, en-GB Xref: csiph.com pl.comp.programming:34990 pl.comp.lang.c:28773 Dzień dobry! (Mimo, że do świtu jeszcze prawie 2,5godz.) Problem jaki teraz chcę poruszyć to programowanie w C++ programów opartych o wtyczki. Tylko trik polega na tym, że są to programy zdarzeniowe czyli używające biblioteki takiej jak Qt. Model programu mam prosty i logiczny: Logiki prog.->Narzędzia prog.->Bibl. własne->Bibl. obce To co dla mnie jest kluczowe, to możliwość rozszerzania logik o wtyczki. Problem jaki tu występuje, to hazard wynikający z przechodzenia zdarzeń przez pętlę zdarzeń, która ma to do siebie że nie gwarantuje kiedy zdarzenie będzie obsłużone. Dlatego wygodny mechanizm sygnał->slot w przypadku wtyczek odpada (bo program staje się nieprzewidywalny). W klasycznym ujęciu problem jest rozwiązywany banalnie: przez tablice wsk. do f. (np. "tablice przerwań programowych" w M$ DOS). Tylko, że w C++ nie mamy dostępu do tablic f. wirtualnych. Jednak można sobie zdefiniować tablice f. C jako f. zwrotnych z góry określoną sygnaturą i je wywoływać z wtyczek. Wadą jest to, że styk miedzy prog. a wtyczką oparty jest nie na obiektach tylko na czystych f. C (co oznacza konieczność użycia globalnych zm. we wtyczkach). W tym przypadku do każdej logiki należało by dodać po jednej tablicy tych f. C na każde przewidziane działanie wtyczek. Z drugiej strony są szablony: Można sobie wyobrazić tablicę obiektów pewnego szablonu (sygnatury f.). I te obiekty mogą mieć albo wsk. do f. C albo wsk. do o. i f. (zgodnej z sygnaturą). Tu należy zadbać jedynie o prawidłowe sygnatury f. i operator porównania który jest konieczny dla f. tablicy removeAll(). To rozwiązanie jest dużo bardziej odlotowe od prostych tablic z f. C, ale ma tą zaletę, że było by obiektowo i bez zm. globalnych we wtyczkach. Pyt. są takie: 1. Czy macie jakieś inne pomysły na wywołania zwrotne z prog. do wtyczek? 2. Jak wasze prawdziwe prog. korzystają z wtyczek? 3. Jakbyście pisali nowy prog. oparty o wtyczki to które rozw. byście wybrali? Miłej sob. i nie.! Jacek Marcin Jaworski