@Riki-tiki-tavi

Как убрать декорацию функции?

Есть библиотека с функцией которая возвращает контейнер. Примерно такая:
std::set<std::string> function();
Библиотеку нужно загружать динамически, значит чтобы найти эту функцию нужно убрать декорацию, как это сделать?
extern "C" использовать не получится, так как функция возвращает класс С++. Под Windows вроде можно использовать def файл, но как сделать такое под Linux?
  • Вопрос задан
  • 599 просмотров
Решения вопроса 1
tzlom
@tzlom
Если под загружается динамически имеется ввиду линковка с .so , то это работает (пишу на всякий случай, мало ли).
Убирать декорацию в самой библиотеке как мне кажется не самая лучшая мысль, но есть другой путь.
Вам нужно в библиотеке объявить С функцию, которая вернёт нужные вам указатели на С++ функции.
Это совершенно адекватный способ, например Qt использует похожий подход только функция конструирует объект наследованный от QPlugin
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
BacCM
@BacCM
C++ почти с рождения
Не уверен что хорошая идея возвращать из библиотеки подобные вещи. Т.к. реализация контейнеров не фиксируется. Поэтому лучше обойтись более простыми типами, или более сложными типа интерфейсов енумераторов самописных или COM.

Если библиотека линкуется статически и предполагается один компилятор то на декорацию стоит забить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы