开发模块化应用程序,我想在每个模块中注入一些帮助类。这应该自动发生。请注意,我的助手有状态,所以我不能只将它们设为静态并在需要的地方包含它们。
我可以将所有助手存储在带有字符串键的映射中,并使其可用于所有模块继承的抽象基类。
std::unordered_map<std::string, void*> helpers;
RendererModule renderer = new RendererModule(helpers); // argument is passed to
// base class constructor
然后在一个模块中,我可以访问这样的助手。
std::string file = (FileHelper*)helpers["file"]->Read("C:/file.txt");
但相反,我想访问这样的助手。
std::string file = File->Read("C:/file.txt");
为此,目前我为模块基类中的所有帮助程序分别定义成员,并为每个特定模块设置它们。
FileHelper file = new FileHelper(); // some helper instances are passed to
// multiple modules, while others are
// newly created for each one
RendererModule renderer = new RendererModule();
renderer->File = file;
有没有办法自动执行此操作,以便在向应用程序添加新帮助程序时不必更改模块代码,同时保留第二种语法?我对 C 宏不太熟悉,所以我不知道他们是否能够做到这一点。