Виртуальное ключевое слово C ++ как способ избежать включения блоков кода - PullRequest
1 голос
/ 08 января 2011

В настоящее время у нас есть основная часть кода, которая позволяет сервисным плагинам, которые предлагают формы связи с ядром, например tcp / ip, udp / ip, usb и т. Д. Эти сервисные плагины подключают экземпляры класса уведомителя обратной связи к ядру для дальнейшей обработки. .

В текущей реализации сервисный проект (который представляет собой отдельную динамически связанную библиотеку, введенную во время выполнения ядром через dlopen и друзей), скомпилируется с файлом notifier.cpp, который находится в исходном коде ядра (отдельный проект). , Это дает доступ к реализациям метода уведомлений. Это прекрасно работает без нареканий.

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

Как избежать проблем с вычислительными затратами, каковы последствия варианта 2?

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

Спасибо

1 Ответ

2 голосов
/ 08 января 2011

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

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

Этот метод будет отлично работать и с * nix разделяемыми библиотеками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...