На диаграмме классов ниже вы можете увидеть мой текущий подход системы плагинов / расширений. Я хочу предложить расширениям API для общих / глобальных вещей. Но предоставляемый API должен содержать только подмножество фактических функций ссылочного объекта. Моей первой мыслью было использовать интерфейс. Проблема в том, что злой плагин может снизить интерфейс внутреннего класса и испортить ситуацию. (Должен ли я вообще заботиться?) Вторая мысль заключалась в использовании шаблона прокси. В настоящее время я использую их обоих. Что не очень нужно, я думаю. Но имея в виду двоичную совместимость, как я могу уменьшить сложность здесь?
Если вам нужны плагины, которые не могут каким-либо образом повредить вашу программу, вы должны сделать эти плагины отдельными процессами. Затем плагины запускаются в отдельном пространстве памяти и связываются с вашим приложением по каналу или сокету.
Я должен даже заботиться?
Нет. Функции C ++ существуют для того, чтобы помочь вам написать правильное программное обеспечение, а не защитить вас от злонамеренных разработчиков. Это не работа языка, чтобы сделать это. Ваши API должны быть разработаны для корректности, полноты и простоты использования.
имея в виду двоичную совместимость, как я могу уменьшить сложность здесь?
Создайте классы API, которые не наследуются ни от чего. Посмотрите на Leap Motion C ++ API для вдохновения, как это сделать правильно.