Per sviluppare una libreria C ++ collegata dinamicamente (cioè un oggetto condiviso) che possa interfacciarsi con i programmi C, qual è la migliore pratica per salvare lo stato del programma tra le chiamate di funzione esportate?
Io come programmatore C ++ non esperto posso pensare ai seguenti metodi:
- Livello unità di compilazione
static
variabili. - Crea un'istanza di
struct
all'heap che detiene lo stato e passa il suo indirizzo indietro in ogni chiamata API (un po 'come JNI).
Il problema con il primo approccio è che le mie variabili di stato necessitano di alcuni dati da inizializzare e questi dati sono forniti chiamando init
API (una delle funzioni esportate). Dall'altro lato, quando si utilizzano le variabili di livello static
del modulo, quei dati non sono ancora disponibili quando tali variabili vengono inizializzate.
Anche il mio problema con il secondo metodo è che ogni funzione API dovrebbe essere fornita con quel puntatore e questo è un po 'macchinoso.
Si noti che esiste un'altra opzione che le variabili static
sono puntatori a quelle variabili di stato e sono assegnate in quella funzione init
(in realtà le variabili di stato sono istanziate in init
e il loro indirizzo sono salvato in quelle variabili statiche). Questa opzione va bene, ma non vorrei usare puntatori dove possibile.