Можно ли определить указатель функции на конструктор? - PullRequest
3 голосов
/ 14 декабря 2010

Я использую разделяемую библиотеку с явным связыванием (загрузка разделяемой библиотеки с dlopen) для реализации шаблона плагина в C ++.

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

Приветствия

Ответы [ 2 ]

6 голосов
/ 14 декабря 2010

Ответ на вопрос: нет, вы не можете определить член или указатель на функцию для конструктора.

Для dlopen вам нужно предоставить функцию с связью c и загрузить ее динамически, что вы можетеиспользуйте для создания объектов, а также вам нужна еще одна функция для удаления объектов.

Подробнее об этом здесь

1 голос
/ 14 декабря 2010

При извлечении указателей с помощью dlsym () вам необходимо знать о проблемах с именами.Не стоит полагаться на какой-то конкретный метод искажения, они слишком разнообразны.Поэтому единственное разумное, что можно сделать, это представить ваш интерфейс плагина как extern "C" {...} с фабричными функциями-обертками над конструкторами.

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