Есть некоторый класс, объявленный и реализованный в .cc файле.
В этом же файле есть глобальные функции createClass, deleteClass.
Этот .cc файл компилируется в .so модуль и затем подгружается в
основную программу. Вопрос такой: как можно определить реализует ли
этот класс, в загруженном .so, определенный интерфейс.
class ModuleManager {
public:
template <class T_Interface>
T_Interface* findModuleForInterface() const
{
// for each of loaded modules {
// if loaded module implements T_Interface { // <- ??
// if module instance is 0 {
// create module instance
// }
// return module instance
// }
// }
// return 0
}
};
Если добавить в .cc файл модуля еще одну функцию:
bool probeClass(const std::type_info& pInfo)
{
return strcmp(typeid(SupportedIfaceA).name(), pInfo.name()) == 0 ||
strcmp(typeid(SupportedIfaceB).name(), pInfo.name()) == 0;
}
Все вроде бы получается. Но только на std::type_info::name()
рассчитывать нельзя.
Как вообще правильно реализуется такое на C++ (приложение работает
с абстрактными интерфейсами; реализации интерфейсов загружаются из
.so файлов; поиск реализации для заданного интерфейса)?