Uwagi do porady

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:
A więc wyjaśniam. Konstruktor klasy pipeCtrl przyjmuje jako argument wskaźnik do funkcji postaci:
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:
Kolejna moja uwaga dotyczy zapisu:
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!
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!