Se è possibile, preferiscono mettere metodi specifici di piattaforma in unità di traduzione separate. Ciò consentirà un codice più leggibile & più facile da sviluppare e mantenere. IMHO, il processo di compilazione dovrebbe determinare quali moduli specifici della piattaforma incorporare.
Ad esempio:
rectangle.hpp:
struct Rectangle
{
void draw(int upper_left_corner_x, int upper_left_corner_y,
unsigned int length, unsigned int width);
}
Ora i file specifici della piattaforma:
rectangle_wx_widgets.cpp:
#include "rectangle.hpp"
void
Rectangle ::
draw(int upper_left_corner_x, int upper_left_corner_y,
unsigned int length, unsigned int width)
{
// wxWidgets specific code here.
}
rectangle_qt.cpp:
#include "rectangle.hpp"
void
Rectangle ::
draw(int upper_left_corner_x, int upper_left_corner_y,
unsigned int length, unsigned int width)
{
// QT specific code here.
}
main.cpp:
#include "rectangl.hpp"
int main(void)
{
Rectangle r;
r.draw(50, 50, 10, 5);
return 0;
}
Il codice di cui sopra non ha direttive del preprocessore condizionali. La funzione main
disegna un rettangolo indipendentemente dalla piattaforma. Le specifiche della piattaforma sono state rimosse da main
perché non sono importanti. Quindi, senza modificare gli switch del compilatore o preoccuparsi di quale identificatore del preprocessore è definito, si può vedere che main
disegna in modo incondizionato un rettangolo.
Per disegnare utilizzando una piattaforma wxWidgets, il processo di generazione utilizza rectangle_wx_widgets.cpp
. Per disegnare usando QT, dovrebbe essere usato il file rectangle_qt.cpp
, ma non entrambi. Come mostra questa illustrazione, non viene modificato alcun codice per produrre codice per entrambe le piattaforme.Si potrebbe adattare il processo di compilazione in modo che il comando build wxWidgets
includa le unità di traduzione appropriate. In questo modo il passaggio di un parametro al processo di generazione genera l'eseguibile specifico della piattaforma.
Do not WxWidgets e SDL forniscono gli esempi di preprocessore che stai cercando? –
(+1) Il concetto rappresentato dal titolo della domanda vale un upvote. Non avere una risposta, leggendo le risposte degli altri sviluppatori ... – umlcat