扩展应用程序而不更改主要方法?

发布于 2024-09-28 22:44:18 字数 75 浏览 2 评论 0原文

我需要在我的 C++ 应用程序中扩展几个类,而不更改应用程序中的任何代码。 (产品扩展作为解决方案)。有特定的设计模式可以做到这一点吗?

I need to extend several class in my c++ application without changing any code in application. (Product extend as a solution). Is there a specific design pattern to do that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

身边 2024-10-05 22:44:18

你的问题有点模糊。为了在不更改任何代码的情况下扩展应用程序,应用程序必须提供特定的可扩展性机制,例如 插件系统

Your question is a bit vague. In order to extend an application without changing any code, the application would have to provide a specific mechanism for extensibility, e.g. a plug-in system.

辞别 2024-10-05 22:44:18

这取决于您想要什么程度的可扩展性。如果扩展需要重新链接代码可以吗?如果可以的话你可以使用工厂方法和多态性。

struct Extension {
    virtual ~Extension() { }
    // ...
};

Extension* load_extension()
{
    ifstream config_file(".conf");
    string line;
    getline(config_file, line);
    if( line == "this extension" ) return new ThisExtension();
    else if( line == "that extension" ) return new ThatExtension();
    // else if ...
    else return NoExtension();
}

在这里,要创建一个新的扩展,您需要做的就是从 Extension 子类化并向工厂方法添加一行。这就是重新编译一个文件并重新链接该项目。

如果无法重新链接应用程序,那么您可以在运行时加载动态库

That depends on what can of extensibility you want. Would it be ok if the extension requires re-linking the code? If it's ok then you can use a factory method and polymorphism.

struct Extension {
    virtual ~Extension() { }
    // ...
};

Extension* load_extension()
{
    ifstream config_file(".conf");
    string line;
    getline(config_file, line);
    if( line == "this extension" ) return new ThisExtension();
    else if( line == "that extension" ) return new ThatExtension();
    // else if ...
    else return NoExtension();
}

Here, to create a new extension all you need to do is subclass from Extension and add a line to the factory method. That's re-compiling one file and relinking the project.

If it is not ok to re-link the application then you can load a dynamic library at runtime.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文