Strona 1 z 1

Uwagi do porady

Nowy postNapisane: środa, 3 września 2008, 11:28
przez kinio
Witam!

Właśnie wróciłem z wakacji i zauważyłem że na portalu pojawiły się nowe porady, w tym jedna o której wcześniej była mowa że się pojawi.
Tak w ogóle to bardzo fajnie że zostało to umieszczone, mam nadzieje że się to komuś przyda.

Mam tylko dwie uwagi co do porady http://www.cyfbar.republika.pl/differ5.html#d16.

W poradzie znajduje się następujący zapis:
Występuje tutaj również deklaracja funkcji readpipe, którą autor (kinio) umieszcza poza klasą formularza, którą można moim zdaniem pominąć jeżeli zamierzamy korzystać z mechanizmu tylko w obrębie jednego formularza, jeżeli jednak chcemy mieć dostęp do całego mechanizmu nie tylko w jednostce Unit1, lecz również w innych jednostkach projektu to należy zadeklarować tą funkcję, a deklarację obiektu klasy pipeCtrl należy w takim przypadku umieścić w sekcji public. Nie do końca rozumiem celowość definiowania funkcji readpipe poza klasą klasą pipeCtrl, gdyż wydaje mi się iż można by zawrzeć wszystko wewnątrz klasy, nie będę jednak ingerował w bibliotekę, tylko skupię się na sposobie użycia


A więc wyjaśniam. Konstruktor klasy pipeCtrl przyjmuje jako argument wskaźnik do funkcji postaci:
Kod: Zaznacz cały
void (*_read_function)(char*)

Jest to wskaźnik do zwykłej funkcji, nie do metody czyli funkcji składowej klasy. Wskaźniki do metod (jak również pól) składowych klas mają nieco inną semantykę. Nie będę tego tutaj tłumaczył jak się je poprawnie definiuje, tylko powiem, że jeżeli ktoś koniecznie chce zdefiniować odpowiednik funkcji readpipe jako metodę jakiejś klasy to trzeba by przedefiniować konstruktor klasy (oraz wszystkie metody wykorzystujące ten wskaźnik) tak aby zamiast aktualnego wskaźnika przyjmował następujący:
Kod: Zaznacz cały
void (__closure *_read_function)(char*)



Kolejna moja uwaga dotyczy zapisu:
To nie wyczerpuje możliwości tej klasy, a jak zapewnia autor i nie ma powodu mu nie wierzyć, możliwe jest wykorzystanie klasy pipeCtrl do uruchamiania nie tylko konsoli CMD, ale do wszystkich programów konsolowych.

Chodzi o to że CMD jest także programem konsolowym, czyli takim którego standardowym wyjściem jest ekran konsoli. Biblioteka przechwytuje zawartość standartowego wejścia/wyjścia niezależnie od tego jaki program na ten interfejs wystawia dane. Może to być CMD, jak też również zwykły program drukujący hello world za pomocą printf, czy cout. Pipe (rura) służy do połączenia dwóch procesów i przesyłania pomiędzy nimi danych, niezależnie jakie są to procesy.

CB , prosiłbym Cię o jakąś aktualizację porady tak aby nie było niedomówień.

Dzięki z góry, pozdr!

Re: Uwagi do porady

Nowy postNapisane: środa, 3 września 2008, 11:34
przez Cyfrowy Baron
Zaktualizowałem...

Re: Uwagi do porady

Nowy postNapisane: środa, 3 września 2008, 16:36
przez banita
kinio napisał(a):...
Jest to wskaźnik do zwykłej funkcji, nie do metody czyli funkcji składowej klasy. Wskaźniki do metod (jak również pól) składowych klas mają nieco inną semantykę. Nie będę tego tutaj tłumaczył ...


w C++ nie istnieje cos takiego jak wskaznik do metody klasy. Sa jednak biblioteki ktore implementuja takowy mechanizm np FastDelegate

Re: Uwagi do porady

Nowy postNapisane: środa, 3 września 2008, 22:58
przez Witold
banita napisał(a):w C++ nie istnieje cos takiego jak wskaznik do metody klasy

Nie istnieje ?
http://pl.cpp.wikia.com/wiki/FAQ#Typ_wska.C5.BAnika_na_funkcj.C4.99.2Ftyp_wska.C5.BAnika_na_metod.C4.99_i_u.C5.BCycie

Re: Uwagi do porady

Nowy postNapisane: czwartek, 4 września 2008, 02:35
przez banita
mechanizm ktory wskazales nie ma w zasadzie żadnego zastosowania. mowiac o konkretnych wskaznikach na metody mialem na mysli tzw delegaty ktore maja sensowne zastosowanie.

Re: Uwagi do porady

Nowy postNapisane: czwartek, 4 września 2008, 08:50
przez Cyfrowy Baron
Też się zastanawiam na praktycznym tego zastosowaniem i zawsze mi wychodzi, że nie ma dla tego żadnego zastosowania...

Re: Uwagi do porady

Nowy postNapisane: czwartek, 4 września 2008, 09:50
przez Witold
kinio wspomniał o wskaźnikach na metody (nie o ich przydatności),
ty napisałeś że takowych nie ma, a nie że są mało użyteczne.

Jestem zielony w C++, a używałem wskaźników do metod (na rzecz *this).
Zresztą to forum o BCB, a w nim jest rozszerzenie dla wskaźników na metody.

Re: Uwagi do porady

Nowy postNapisane: środa, 10 września 2008, 15:47
przez banita
Cyfrowy Baron napisał(a):Też się zastanawiam na praktycznym tego zastosowaniem i zawsze mi wychodzi, że nie ma dla tego żadnego zastosowania...


ostatnio przypomnialo mi sie praktyczne zastosowanie tych wskazników, wiec postanowilem tutaj o tym wspomniec. otoz sa one wykozystywane(jako argumenty) przy adaptatorach funkcji: mem_fun i mem_fun_ref z biblioteki STL.