2017-08-14 38 views
-1

我有一個程序,它通過網絡獲取命令並將它們分配給一個特定的函數。現在我想實現一個插件功能,我可以在一個文件夾中添加一個.dll文件。下一步是根據命令調用dll中的方法。反射+函數指針vs觀察者模式

我有兩個想法如何解決這個問題,但我不知道其中哪些是更好/更高性能:

  1. 初始化從反射的dll所有方法+命令,並將其存儲在一個std::map<std::string, void(*func)(args...)> 。當程序收到一條命令時,它會在地圖中查找相關的函數並調用它。

  2. 將DLL加載到運行時並創建一個接口,將std::string與參數交給所有已實現它的dll。 dll中的方法使用if語句來檢查可以在那裏處理的命令。 (觀察者模式)

如果有更好的選項,我沒有提到讓我知道。

回答

0

雖然使用的是不正確的術語來描述你想要的,我會說選項2是「乾淨」

強制由DLL插件實現一個單一的接口是什麼建立的最佳實踐方法在我看來,你正在尋找的是一種依賴注入。

+0

什麼術語是不正確的,所以我可以編輯我的問題?選項2是否更具執行力,還是隻是「更清潔」? –