Domanda

Al momento abbiamo un corpo di codice che consente estensioni dei servizi che offrono forme di comunicazione al nucleo ad esempio TCP / IP, UDP / IP, USB, ecc ... Queste estensioni dei servizi di feedback notificante istanze di classe al nucleo per ulteriori elaborazioni .

Nell'implementazione corrente di un progetto di servizio (che è una libreria separata collegata dinamicamente portato in fase di esecuzione da parte del nucleo tramite dlopen e amici) compilerà contro il file notifier.cpp che risiede nel codice sorgente di base (un progetto separato) . Questo dà l'accesso alle implementazioni metodo notificanti. Questo funziona perfettamente lamentele.

Due opzioni alternative: 1. mettere le implementazioni di metodo notificante nel file di intestazione. 2. dichiarare i metodi notificatore virtuale e ritardo vincolante fino runtime.

Come evitare i problemi di overhead computazionale quali sono gli impatti di opzione 2?

Ci sono altre opzioni a nostra disposizione?

Grazie

È stato utile?

Soluzione

Sì, esponendo un'interfaccia con funzioni virtuali pure per i consumatori è il modo standard di esporre oggetti C ++ da una DLL di Windows. Il client non è a conoscenza di dettagli di implementazione:. No variabili membro, nessun corpo funzione membro, solo il layout virtuale

(conteggio Aggiungi riferimento e una versione indipendente dal linguaggio di dynamic_cast, che chiameremo QueryInterface, e si dispone di COM, che è pervasiva su Windows)

Questa tecnica funziona bene su * nix librerie condivise pure.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top