Виртуальное ключевое слово C ++ как способ избежать включения кодовых единиц

StackOverflow https://stackoverflow.com/questions/4631329

Вопрос

В настоящее время у нас есть тело кода, который позволяет плагинам обслуживания, которые предлагают формы связи с ядром, например, TCP / IP, UDP / IP, USB и т. Д. Эти сервисные плагины обратной связи.

В текущей реализации сервисный проект (который является отдельной динамически связанной библиотекой, привлеченной во время выполнения по ядру через Dlopen и Friends), будет компилироваться против файла Notifier.CPP, который находится в исходном коде основных (отдельных проекта). Это дает доступ к реализациям метода уведомлений. Это отлично работает без жалоб.

Два альтернативных варианта: 1. Поместите реализации метода уведомателя в файл заголовка. 2. Объявите методы уведомителя виртуальные и задержать привязку до выполнения времени.

Предотвращение вопросов вычислительных накладных расходов. Каковы воздействия варианта 2?

Есть ли другие варианты, доступные для нас?

Спасибо

Это было полезно?

Решение

Да, выставляя интерфейс с чистыми виртуальными функциями для потребителей, является стандартным способом выставления объектов C ++ из Windows DLL. Клиент не знает о любых деталях реализации: нет переменных элементов, нет органов функций членов, просто виртуальный макет.

(Добавить ссылочную подсчет и языковой агностической версии dynamic_cast, который мы позвоним QueryInterface, а у вас есть ком, который распространяется на окнах)

Эта техника будет работать просто на * NIX общих библиотеках.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top