C de mot-clé virtuel comme un moyen d'éviter d'inclure des unités de code
-
08-10-2019 - |
Question
À l'heure actuelle, nous avons un corps de code qui permet aux greffons de services qui offrent des formes de communication au noyau par exemple tcp / ip, udp / ip, usb, etc ... Ces plug-ins de services rétroaction notificateur instances de classe au cœur d'un traitement ultérieur .
Dans la mise en œuvre actuelle un projet de service (qui est une bibliothèque distincte liée dynamiquement apporté à l'exécution par le noyau via dlopen et amis) compile contre le fichier notifier.cpp qui réside dans le code source du noyau (un projet distinct) . Cela donne accès aux implémentations de la méthode de notifiants. Cela fonctionne parfaitement aucune plainte.
Deux options alternatives: 1. mettre les implémentations de la méthode notificateur dans le fichier d'en-tête. 2. déclarer les méthodes de notificateur virtuelle et obligatoire délai avant l'exécution.
Éviter les problèmes de temps de calcul quels sont les impacts de l'option 2?
Y at-il d'autres options disponibles pour nous?
Merci
La solution
Oui, l'exposition d'une interface avec des fonctions virtuelles pures aux consommateurs est le moyen standard d'exposer des objets C ++ à partir d'une DLL Windows. Le client ne connaît pas tous les détails de mise en œuvre:. Pas de variables membres, pas de corps de la fonction membre, simplement mise en page virtuelle
(comptage Ajouter une référence et une version linguistique agnostique de dynamic_cast
, que nous appellerons QueryInterface
, et vous avez COM, qui est omniprésente sous Windows)
Cette technique fonctionne très bien sur les * nix bibliothèques partagées aussi bien.