2016-10-10 12 views
0

В приложении с плагинами ядро ​​/ исполняемый файл имеет несколько чистых виртуальных интерфейсов, которые должны реализовывать плагины (dll/so). Кроме того, существуют стандартные реализации этих интерфейсов, которые должны быть доступны плагинами.Как экспортировать классы из основного приложения в библиотеки/плагины?

Нужно ли вообще экспортировать чистые виртуальные интерфейсы? Я имею в виду, что они состоят только из файлов заголовков, которые библиотеки в любом случае используют во время компиляции. Значит, мне не нужен символ во время выполнения, не так ли?

Как экспортировать классы из основного приложения в плагины? Это имеет смысл вообще? Какова наилучшая практика для этого случая?

Это означает, что эти символы должны быть не определены в библиотеках. Как мне это достичь?

ответ

0

Чистые виртуальные интерфейсы будут включать в себя виртуальный деструктор, который заставит компилятор «создать» v-таблицу.

Часто рекомендуется иметь этот v-стол, созданный только в одном блоке компиляции, а иногда это важно, если вы собираетесь использовать информацию о типе времени выполнения для класса.

В ситуации с подключаемым модулем вы потенциально хотите «проверить», что класс реализует базовый класс «интерфейс».

Основное приложение может подключаться к «модели», что позволяет плагинам добавлять свои собственные, если вы пишете их так, чтобы их можно было добавлять более чем одним способом.

+0

Действительно, мне нужен RTTI. Означает ли это, что я должен экспортировать интерфейсы? Тем не менее я не знаю, как экспортировать их из основного приложения. – ManuelSchneid3r

+0

Если вы сделаете это так, вы поместите интерфейсы в библиотеку где-нибудь и получите как ваше приложение, так и плагины, чтобы включить их и связать с ними. У меня сильно искушение указать вам https://github.com/dotfield/ioc – CashCow