我有许多在应用程序和/或静态库中使用的缓存。出于性能原因,应用程序使用的所有缓存(实现为单例)以及应用程序所依赖的相应库都需要在应用程序启动时预加载。因此,有一长串缓存加载函数调用难以维护 - 如果在库中使用新缓存,则必须将其添加到依赖于该库的每个应用程序的列表中。
我考虑过使用自注册类的解决方案,但鉴于缓存位于静态库中,它们不会注册。保留一个要注册的类列表会在重新引入初始解决方案时失败。
接下来我正在考虑一个涉及某种依赖关系图的解决方案,但我很想听听你的解决方案/建议。
答案 0 :(得分:0)
例如,您拥有依赖于它们的引擎和扩展库以及应用程序项目。 您可以使每个库函数loadCaches(),以便您的项目的加载例程变为:
engine::loadCaches();
extension::loadCaches();
application::loadCaches();
如果存在主库,例如引擎,并且所有类型的扩展依赖于它,您可以进一步介绍其中的库处理接口:
namespace engine {
LibraryDelegate {
virtual void loadCaches() = 0;
}
void registerLibrary( LibraryDelegate* );
}
现在您的项目加载例程将如下所示:
engine::registerLibrary( extensions::sharedLibraryDelegate() );
engine::registerLibrary( application::sharedLibraryDelegate() );
几乎相同,但随着实现的增加封装在库级别 - 您的应用程序现在只负责引入引擎的库,其余的交互直接通过库接口,可以使用unloadCaches轻松扩展()或任何你想要的东西。