Metoda wytwórcza. Kod zależny od platformy

0

Cześć,

w moim kodzie chcę zrobić coś takiego.

Kod będzie wykonywał zadania. Każde zadanie jest różne i wykonywane przez wyspecjalizowanego do tego zadania pracownika. Zadania będą takie same na wszystkich platformach, ale kod, który je wykonuje jest zależny od platformy. Przykład:

Mamy zadanie: Zmień głośność.
Mamy do tego wyspecjalizowanego pracownika: ZmieniaczGłośności
Tyle, że kod do zmieniania głośności jest inny dla windowsa i linuxa. Na windowsie możemy wywołać funkcję z WinApi waveOutSetVolume(), a na linuxie pewnie jakąś inną.

I teraz jak to zrobić, żeby napisać jeden kod, który się skompiluje na obu platformach?

Myślałem o wzorcu Metoda wytwórcza, która będzie tworzyła pracowników oraz kodem opartym na #ifdef itp. Czyli np. tworzymy dwa pliki. ZmieniaczGlosnosciWindows.hpp oraz ZmieniaczGlosnosciLinux.hpp. W obu była by zadeklarowana klasa ZmieniaczGlosnosci, która by już tą zmianą głośności się zajmowała. W pliku metody wytwórczej mielibyśmy coś takiego

 
#ifdef WINDOWS
#include <ZmieniaczGloscnosciWindows.hpp>
#else
#include <ZmieniaczGloscnosciLinux.hpp>
#endif

Czy to jest dobre podejście? Jeżeli nie to co proponujecie?

1

Zazwyczaj właśnie tak się to robi i jest to dobre podejście.

EDIT: nie ma żadnego sensownego wytłumaczenia stosowania własnych flag kompilacji. Standardem są:

#ifdef TARGET_OS_MAC
// cos
#elif defined __linux__
// cos2
#elif defined _WIN32 || defined _WIN64
// cos 3
#elif defined __ANDROID_API__
//cos 4
1

Poza tym co napisal nieznajomy987 to wyglada dobrze

0

Dzięki za odpowiedzi (:

@nieznajomy987 Wiem o tych flagach, ale nie pamiętałem jakie są, a chciałem szybko napisać posta i podałem przykład tylko. Niemniej dzięki za podanie prawidłowych. Nie będę musiał już szukać po necie (:

1

nie ma żadnego sensownego wytłumaczenia stosowania własnych flag kompilacji. Standardem są:

Jest. To po prostu typowa abstrakcja nad czymś, co wcale tak standardowe nie jest. Prawie wszystkie duże projekty mają własne "flagi", które pomagają pisać kod na różne platformy, systemy operacyjne, środowiska.

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