C ++ parola chiave virtuale come un modo per evitare di includere unità di codice
-
08-10-2019 - |
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
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.