Виртуальное ключевое слово C ++ как способ избежать включения кодовых единиц
-
08-10-2019 - |
Вопрос
В настоящее время у нас есть тело кода, который позволяет плагинам обслуживания, которые предлагают формы связи с ядром, например, TCP / IP, UDP / IP, USB и т. Д. Эти сервисные плагины обратной связи.
В текущей реализации сервисный проект (который является отдельной динамически связанной библиотекой, привлеченной во время выполнения по ядру через Dlopen и Friends), будет компилироваться против файла Notifier.CPP, который находится в исходном коде основных (отдельных проекта). Это дает доступ к реализациям метода уведомлений. Это отлично работает без жалоб.
Два альтернативных варианта: 1. Поместите реализации метода уведомателя в файл заголовка. 2. Объявите методы уведомителя виртуальные и задержать привязку до выполнения времени.
Предотвращение вопросов вычислительных накладных расходов. Каковы воздействия варианта 2?
Есть ли другие варианты, доступные для нас?
Спасибо
Решение
Да, выставляя интерфейс с чистыми виртуальными функциями для потребителей, является стандартным способом выставления объектов C ++ из Windows DLL. Клиент не знает о любых деталях реализации: нет переменных элементов, нет органов функций членов, просто виртуальный макет.
(Добавить ссылочную подсчет и языковой агностической версии dynamic_cast
, который мы позвоним QueryInterface
, а у вас есть ком, который распространяется на окнах)
Эта техника будет работать просто на * NIX общих библиотеках.