Jak zaprojektować niestandardowy obiekt IO dla Boost.Asio

Mam klasę bazową (DeviceBase) reprezentującą wbudowane urządzenie, z którą chcę się komunikować. Dostęp do urządzenia można uzyskać na różne sposoby, w tym przez gniazda USB i TCP. Dodatkowo istnieje próbna implementacja, która działa na plikach.

Do tej pory korzystałem tylko z synchronicznych wywołań odczytu / zapisu, a wszystkie implementacje są po prostu klasami pochodzącymi z klasy bazowej, nadpisując funkcje odczytu / zapisu. To pozwala mi używać polimorficznych wskaźników i kontenerów, aby zapewnić niezależny od implementacji dostęp do urządzenia zgodnie z logiką aplikacji.

Teraz chcę użyć Boost.Asio, aby włączyć proste asynchroniczne IO. Znalazłem ten przewodnikhttp://www.highscore.de/cpp/boost/asio.html opisując, jak pisać własne rozszerzenia, ale jest to dość uproszczone i natknąłem się na pewne problemy, które nie są tam omawiane.

Obecnie wszystkie moje implementacje mają różne konstruktory (oczywiście z powodu różnych sposobów adresowania / inicjowania połączenia urządzenia). Klasa implementacji przedstawiona w przewodniku jest skonstruowana przez io_service, co oznacza, że ​​użytkownik nie może przekazywać argumentów konstruktorowi.

Przykład w przewodniku zapewnia klasę szablonów w postacicustom_io_object<implementation>, co uniemożliwiłoby użycie wskaźników polimorficznych, ponieważ obecnie nie ma wspólnej klasy bazowej dla różnych rodzajów obiektów IO.

Czy istnieje jakaś forma dokumentacji lub książek, które omawiają projekt rozszerzeń Boost.Asio? Czy coś przeoczę?

questionAnswers(1)

yourAnswerToTheQuestion