尝试查看 XPCOM 为您解决这些问题 - 通过重新实现 COM。
您有不知道插件为您的应用程序提供什么接口的问题,因此您需要一种方法让开发人员访问它,而编译器不知道它是什么(但是,如果您提供头文件,那么突然间您就知道了它是什么,你可以编译它而不需要插件未知接口的花哨)
因此,您将不得不依赖接口的运行时确定性,这大致要求您以某种方式定义接口,以便框架可以在其上调用任意方法,我认为您可以做到这一点的唯一现实方法就是将每个接口定义为一组函数指针,单独加载,然后存储在数据中供用户调用。这几乎意味着指向名称的函数指针映射。这也意味着您只能通过使函数名称唯一来用户编译器的细节(例如重载)。编译器通过将所有函数“修改”为唯一的编码名称来为您完成此操作。
Type Traits will help you wrap your imported functions in your framework, so you can inspect them and create classes that work with any imported type, but it isn't going to solve the main problem of importing arbitrary functions.
Possibly one approach that you'll want to read is Metaclasses and Reflection by Vollmann. This was referenced by the C++ standard body, though I don't know if it will become part of a future spec. Alternatively you can look at Boost.Extension