2014-05-21 26 views
0

我有一些在應用程序和/或靜態庫中使用的緩存。出於性能原因,應用程序使用的所有緩存(實現爲單例)以及應用程序所依賴的相應庫需要在應用程序啓動時預加載。因此,有一長串高速緩存加載函數調用難以維護 - 如果在庫中使用新緩存,則必須將其添加到依賴於該庫的每個應用程序的列表中。C++ - 在進程啓動時加載依賴緩存

我考慮過使用自注冊類的解決方案,但考慮到緩存位於靜態庫中,它們不會註冊。隨着重新引入最初的解決方案,保留要註冊的類的列表將會失敗。

接下來我正在考慮涉及某種依賴關係圖的解決方案,但我非常希望聽到您的解決方案/建議。

回答

0
  1. 加載函數是否採用任何參數,僅在項目級別上已知,即filepaths?
  2. 有沒有其他類庫依賴的主庫?

例如,您有依賴它們的引擎和擴展庫以及應用程序項目。 可以使每個庫函數loadCaches(),所以你的項目的加載程序shkrinked到:

engine::loadCaches(); 
extension::loadCaches(); 
application::loadCaches(); 

如果有主庫中存在,如發動機,和所有類型的擴展名依賴於它,你可以更進一步,引進庫操作界面吧:

namespace engine { 
    LibraryDelegate { 
     virtual void loadCaches() = 0; 
    } 

    void registerLibrary(LibraryDelegate*); 
} 

現在,您的項目加載程序將是這樣的:

engine::registerLibrary(extensions::sharedLibraryDelegate()); 
engine::registerLibrary(application::sharedLibraryDelegate()); 

幾乎相同,BU t的實現獲得了封裝在庫級別上的實現 - 您的應用程序現在只負責引擎的庫引入,剩下的交互直接通過庫接口,可以使用unloadCaches()或任何您想要的方式輕鬆擴展。