我有一个程序通过网络获取命令并将它们分配给特定的功能。现在我想实现一个插件功能,我可以在文件夹中添加.dll文件。下一步是根据命令调用dll中的方法。
我有两个想法如何解决这个问题,但我不知道哪个更好/更高效:
使用反射初始化来自dll的所有方法+命令,并将它们存储在std::map<std::string, void(*func)(args...)>
中。当程序收到命令时,它会在地图中查找相关的函数并调用它。
将dll加载到运行时并创建一个接口,该接口使用已实现它的所有dll的参数移交std::string
。 dll中的方法使用if
语句来检查命令是否可以在那里处理。 (观察员模式)
如果有更好的选择,我没有提及,请告诉我。
答案 0 :(得分:0)
虽然您使用不正确的术语来描述您想要的内容,但我会说选项2是&#34;更清洁&#34;
在我看来,强制一个由插件DLL实现的单一界面是建立你正在寻求的依赖注入的最佳实践方式。