Есть некоторый класс, объявленный и реализованный в .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 файлов; поиск реализации для заданного интерфейса)?