Я новичок, поэтому, пожалуйста, не стесняйтесь уточнять и объяснять, что вы имеете в виду.В настоящее время я работаю над сторонним исходным кодом на c ++, для которого я разрабатываю плагины, и который я не хочу изменять по понятным причинам (выходит новая версия, Sharability и т. Д.).Авторы стороннего кода подготовились к использованию плагинов с помощью внешнего файла инструкций, в котором параметры и тому подобное задаются с помощью ключевых слов.Создание объекта считывает ключевые слова в инструкции и находит на фабрике, было ли ключевое слово объявлено.Если это так, он вызывает указанный конструктор, в противном случае вызывает конструктор по умолчанию.До сих пор мне приходилось иметь дело только с такими объектами, связанными с фабрикой, поэтому я создал библиотеки DLL, которые определяют подклассы и вызывают связанный конструктор, используя файл инструкций.Затем я мог бы использовать перегруженные или переопределенные функции, определенные в dll, в остальной части основной программы (поскольку созданный объект принадлежал подклассу).
Причина этого вопроса в том, что я нехотите коснуться исходного исходного кода и все еще хотите перегрузить / переопределить функцию, используемую в основной программе, но она не определена в объекте, связанном с фабрикой.Это основная программная декларация функции в классе TrajectoryLoader:
namespace NAF {
class TrajectoryLoader : public Object {
public:
NAF_CORE_API TrajectoryLoader() { _good = false; }
NAF_CORE_API virtual ~TrajectoryLoader() {}
NAF_CORE_API virtual bool LoadTrajectory(std::string filename);
NAF_OBJ_DECLARES(TrajectoryLoader)
private:
CSVRange _range;
bool _good;
};
}
. Я хочу перегрузить / переопределить виртуальный bool LoadTrajectory NAF_CORE_API, который загружает и анализирует файл аргументов для создания "Траектория "объект будет использоваться позже.Мне нужно разрешить разные форматы файлов, поскольку теперь он получает только определенный синтаксис записи.
Я подумал, что мог бы создать подкласс для TrajectoryLoader и вызвать перегруженную версию LoadTrajectory, но основной кодвызывает LoadTrajectory следующим образом:
traj = std::make_shared<TrajectoryLoader>();
traj->NAFSetName(id);
traj->LoadTrajectory(v);
с "v" - полным именем файла, который я хочу загрузить.Даже с определенным подклассом, я ожидаю, что «traj» из родительского класса, Loadtrajectory будет не переопределенной функцией (я также проверял это).
Тогда возникают вопросы: Могу ли я сделатьэто второй фрагмент кода вызова для перегруженной версии LoadTrajectory?(Я предполагаю, что ответ будет отрицательным) и Как я могу заставить основную программу (которую я не хочу изменять) вызывать функции из моей собственной библиотеки DLL во время выполнения?
Я надеюсь, что я ясен в своем запросе, но я признаю, что только запустил C ++ для этого проекта, поэтому, возможно, я пропустил некоторые простые приемы, которые сработали бы.Я два дня искал в интернете, пытаясь найти способ, но не нашел.
Также возможно, что это невозможно сделать, и в этом случае мне придется искать другой способ заставить все работать.
Спасибо за вашу помощь, и извините за долгое времясообщение или, если это дубликат, я могу пропустить технический термин, чтобы найти то, что я хочу.
С любовью
Мортимер
править: пытаться уточнить вопрос.