Come hai detto, non desideri introdurre una dipendenza da queste enumerazioni nel tuo codice (una scelta sensata, specialmente per le modifiche / librerie di terze parti che cambiano frequentemente).
Devi comunque avere un qualche tipo di mappatura nella tua classe "Wrapper" per quelle enumerazioni per inviare le tue richieste. A seconda di ciò che questi enumerati rispondono (e quanti ce ne sono) potresti avere diverse opzioni:
Se ci sono molti valori enum diversi
// ClientLib
enum FooDevices { DEVICE_F1, DEVICE_F2, ... DEVICE_F83 };
enum BarDevices { DEVICE_B1, DEVICE_B2, ... DEVICE_F61 };
// Wrapper
enum WrappedFooDevices { WRAPPED_DEVICE_F1 ... };
enum WrappedBarDevices { WRAPPED_DEVICE_B1 ... };
void sendRequest(WrappedFooDevices fooDevice, WrappedBarDevices barDevice);
Quindi usare una sorta di enum wrapper potrebbe essere l'unica scelta sensata (anche se hai ancora un po 'di leerway come avvolgi quei valori - lascia fuori quelli che non usi mai, ecc.)
Se ci sono solo alcuni valori di enum potresti essere in grado di creare una funzione separata per ciascuno.
// ClientLib
enum RequestType { FAST_REQUEST, SLOW_REQUEST, DATA_REQUEST };
// Wrapper
void sendFastRequest();
void sendSlowRequest();
void sendDataRequest();
In breve: come hai intuito, farai un qualche tipo di mappatura, ma potresti essere in grado di fare quella mappatura tramite chiamate di funzioni distinte (specialmente se le enumerazioni originali hanno l'odore del codice "valore della bandiera").