игнорировать это, я думал об обходном пути с использованием поколения заголовков. Это не самое приятное решение, но оно работает. Этот вопрос должен странно понимать. В основном я хочу вызвать виртуальную функцию, которая не была объявлена в lib или dll, и использовать ее как обычно (но не реализовано/пустое функционирование).расширить абстрактный базовый класс без перекомпиляции источника?
У меня есть абстрактный базовый класс в моей библиотеке. Все мои плагины наследуют от него, пользовательский плагин наследует от этого класса, и его приложение использует этот класс в качестве указателя плагина. Я хочу, чтобы этот пользователь мог расширять класс и добавлять его функции. Проблема в том, что я уверен, что если он добавит виртуальную функцию и попытается ее вызвать, код будет разбит из-за того, что мои объекты не имеют дополнительных данных в своей таблице. Как я могу обойти это? Я думал о наследовании, но это привело бы к уродливым проблемам, когда третий игрок начнет играть. Я не хочу, чтобы он делал приказ для отправки расширенных функций.
Я думал о функции msg как intptr_t sendMsg (enum msgName, void * argv); Но это удаляет safty, и мне нужно будет все придумать. Какое лучшее решение для этого? Я бы скорее использовал vtables, а затем использовал функцию sendMsg. Как я могу обойти это?
Вы можете написать свой код? – cbrulak
Возможно, я неправильно понял вопрос, но я подумал бы, что до тех пор, пока производный класс будет создан правильно, он не потерпит крах. Не могли бы вы уточнить? – codelogic
Если его код является «новым» для его класса, он будет работать нормально. (Хотя, как и кодологический, может быть, я не «получаю» вопрос.) –