Дизайн интерфейса общей библиотеки для совместимости с Android и gcc / clang - PullRequest
0 голосов
/ 11 декабря 2018

Это скорее вопрос дизайна относительно Android.

У меня есть общая библиотека, которая предоставляет какой-то интерфейс, допустим, IFoo.Вместо обычной пары IFoo* CreateFoo() и DeleteFoo(IFoo*) я хотел создать шаблон CreateFoo(std::shared_ptr<IFoo>&), в котором я устанавливаю правильное средство удаления при создании std::shared_ptr, чтобы клиент не отвечал за освобождение интерфейса.вручную.Теперь это нормально для Windows и MacOS, но я столкнулся с проблемами с Android.Допустим, мне нужно иметь возможность поддерживать версии gcc и clang ndk (я знаю, что gcc устарела с ndk 18, но есть люди, которые до сих пор сидят на старых версиях ndk для производственного кода).Возникает проблема: из-за искажения имени нельзя использовать метод CreateFoo(std::shared_ptr<IFoo>&), если общий объект был создан с помощью clang, и он использует gcc или наоборот.Я мог бы:

  • Поставить две версии совместно используемой библиотеки (gcc и clang)
  • Откатиться к использованию отдельных методов создания и удаления для IFoo

Но, может быть, есть и другие хорошие способы обойти эту проблему?

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