Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;-进程启动时加载依赖缓存_C++_Caching - Fatal编程技术网

C++ C++;-进程启动时加载依赖缓存

C++ C++;-进程启动时加载依赖缓存,c++,caching,C++,Caching,我在应用程序和/或静态库中使用了许多缓存。出于性能原因,应用程序使用的所有缓存(实现为单例)以及应用程序所依赖的各个库都需要在应用程序启动时预加载。因此,缓存加载函数调用的列表很长,很难维护—如果库中使用了新缓存,则必须将其添加到依赖于该库的每个应用程序的列表中 我考虑了一个使用自注册类的解决方案,但由于缓存位于静态库中,它们不会注册。保留一个要注册的类列表并不能达到目的,因为它会重新引入初始解决方案 接下来,我正在考虑一个涉及某种依赖关系图的解决方案,但我渴望听到您的解决方案/建议 加载函数是

我在应用程序和/或静态库中使用了许多缓存。出于性能原因,应用程序使用的所有缓存(实现为单例)以及应用程序所依赖的各个库都需要在应用程序启动时预加载。因此,缓存加载函数调用的列表很长,很难维护—如果库中使用了新缓存,则必须将其添加到依赖于该库的每个应用程序的列表中

我考虑了一个使用自注册类的解决方案,但由于缓存位于静态库中,它们不会注册。保留一个要注册的类列表并不能达到目的,因为它会重新引入初始解决方案

接下来,我正在考虑一个涉及某种依赖关系图的解决方案,但我渴望听到您的解决方案/建议

  • 加载函数是否接受仅在项目级别已知的任何参数,即文件路径
  • 是否有其他库所依赖的任何类型的主库
  • 例如,您有引擎和扩展库以及依赖于它们的应用程序项目。 您可以使每个库函数loadCaches()使项目的加载例程shkrinked到:

    engine::loadCaches();
    extension::loadCaches();
    application::loadCaches();
    
    如果存在主库,例如engine,并且所有类型的扩展都依赖于它,那么您可以进一步在其中引入库处理接口:

    namespace engine {
       LibraryDelegate {
          virtual void loadCaches() = 0;
       }
    
       void registerLibrary( LibraryDelegate* );
    }
    
    现在,您的项目加载例程将如下所示:

    engine::registerLibrary( extensions::sharedLibraryDelegate() );
    engine::registerLibrary( application::sharedLibraryDelegate() );
    
    大致相同,但随着实现在库级别上封装,您的应用程序现在只负责将库引入引擎,其余的交互直接通过库接口进行,可以使用unloadCaches()或任何您想要的工具轻松扩展库接口