通常你鏈接反對的東西,所以插件對核心庫中的一個環節,因爲它需要了解的核心實現的功能,隱式鏈接不存在,不存在內部核心插件A的知識(並且不應該有),所以核心不知道插件A或B,這意味着插件B和A不會彼此瞭解彼此。
在這種模式下你要保持它與插件之間不可知和使用接口或抽象類進行通信。 (例如,如果一個插件繼承了Core的某些純虛函數,另一個插件可以持有指向它的指針,並且在不知道完整實現的情況下調用函數)
通常你會鏈接某些東西,所以插件A鏈接核心庫,因爲它需要知道關於核心實現的功能,隱含的鏈接不存在,沒有知識插件A內核(並且不應該)所以因此核心不知道插件A或B,並且意味着插件B和A不會彼此瞭解彼此。
編輯發表評論:
在可以使用的接口,它的插件繼承這種情況下。所以在覈心庫中,您創建了一個名爲ITerminal的類,該類具有一組虛擬函數(更新,初始化,連接,打開,無論您需要什麼),而不需要實現,然後pluginA可以繼承它併爲函數實現。這樣其他插件可以處理ITerminal並在不知道插件A的細節的情況下調用它的函數。要創建它,你需要一個工廠,例如Core :: CreateTerminal,它將返回一個ITerminal(ITerminal * object = new PluginA();)現在pluginB可以調用Core :: CreateTerminal,這給了他們一個ITerminal句柄,它有一個實現核心在這種情況下選擇了。爲了擴展它,你可以讓插件自己註冊到核心,所以核心只需在插件中調用一個創建函數,例如pluginA可以將自己註冊爲IT最終類到核心,然後當CreateTerminal被調用時,它會調用插件來創建一個特定的目的。這樣你可以交換插件進出(有不同的終端,而無需更改核心或其他插件)
「我不知道什麼時候符號得到解決完全發生」 - 某些東西給你閱讀右邊那裏.. –
那些隱含鏈接沒有任何意義 – VTT
插件是在運行時動態加載的,還是由鏈接器在編譯時靜態加載的?你的問題並不清楚。 – 1201ProgramAlarm