Il modo in cui di solito lo faccio è creare una piattaforma namespace in Platform.h e ogni chiamata del sistema operativo è incapsulata da una funzione statica in questo spazio dei nomi. Quindi l'unico posto nell'intero codice base che sa quale sistema operativo viene utilizzato è Platform.cpp. È un buon modo per semplificare le cose? Ad esempio, quando chiamo Platform :: MessageBox (...), ciò che effettivamente accade è:
void Platform::MessageBox(...)
{
#ifdef(_WINDOWS)
....
#elif(_LINUX)
....
#elif(_MAC)
....
#endif
}