Czy można uzyć koncpecji sygnał/slot bez Qt ?

0

Czy jest jakaś biblioteka do c++ która umożliwia używanie podobnego mechanizmu jak sygnał/slot z Qt i nie jest to Boost.Signals2 ?

Czy koncepcja na które działa w Qt sygnał/slot można podciągnąć pod wzorzec "obserwator" ?

5

Coś takiego mam w zakładkach: https://julienjorge.medium.com/testing-c-signal-slot-libraries-1994eb120826

Samemu tylko z Qt korzystałem, nie mam opinii na temat reszty.

3

WP obserwator odpowiednie metody obserwatorów zostają wywołane natychmiast po zajściu odpowiedniego zdarzenia w obserwowanym
W przypadku Qt (pod Windows oraz Xwin mechanizm jest podobny) do kolejki słota zostanie dopisano odpowiednie zdarzenie i to tyle.
Sama obróbka zdarzenia następuje osobno w obrębie formatki.

2

Czy koncepcja na które działa w Qt sygnał/slot można podciągnąć pod wzorzec "obserwator" ?

I tak i nie, pewne jest to, że nie warto zaprzątać sobie tym głowy. Klasyfikowanie rozwiązań pod poszczególne wzorce to w większości mocno subiektywno-filozoficzna dysputa, która nie prowadzi do niczego. Jedna z praktycznych implementacji obserwatora, czyli DBus na likuksie, używa signal w swoim nazewnictwie. Tym nie mniej, obserwator zakłada dość swobodną obserwację stanu bez wiedzy na temat wykonania, sygnał za to jest bezpośrednim rezultatem jakiegoś wykonania i odbiorca jest zainteresowany co się działo w innym module a nie tylko w jaki sposób zmienił się stan. Także zdecyduj sam, jak dla mnie po której kolwiek stronie staniesz to będziesz miał rację.

A wracając do głównego pytania. Sygnały i sloty to abstrakcyjne pojęcie opisujące technikę komunikacji z zachowaniem bezpieczeństwa typów, zdecydowanie nie jest ona ekslyzuwna dla Qt. Chyba równolegle do Qt powstało libsigc++ które zapewniało implementację na szablonach bez konieczności używania dodatkowego kompilatora tak jak w Qt. Nie wiem czy jest nadal rozwijana, kojarzy mi się, że interfejs wyglądał podobnie jak do tego w Boost.Signal, ale mogę się mylić. Widziałem też uproszczone implementacje na makrach, które mieściły się na jednym ekranie, sporo tego jest w internecie.

2
Adamek Adam napisał(a):

Czy jest jakaś biblioteka do c++ która umożliwia używanie podobnego mechanizmu jak sygnał/slot z Qt i nie jest to Boost.Signals2 ?

Kiedyś takie coś zrobiłem na owrapowanych Boost.Signals (pierwszych signalsach).
Signals2 szybko okazały się nieadekwatne i je zarzuciłem.

2

Kiedyś szukałem czegoś sensownego i nie znalazłem. Jeśli się uprzesz, to CopperSpice technicznie nie jest Qt, ale nie korzystałem nigdy aby się wypowiedzieć. Ale między innymi z tego powodu korzystam z Qt w moich projektach bez GUI - implementacja sygnałów/slotów z Qt jest fantastyczna i pozwala na pełną separację modułów (a zatem i ich testowanie w separacji) bardzo niskim kosztem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1