我想知道是否可以在运行时更改应用程序的逻辑? Meybe我们可以用另一个实现替换抽象类的实现吗?或者也许我们可以在运行时替换共享库...
更新: 假设我有两个函数foo(x,y)的实现,并且可以基于strategy pattern
使用它们中的任何一个。现在我想知道是否可以在不重新启动应用程序的情况下添加第三个foo(x,y)实现。
答案 0 :(得分:4)
您可以使用暴露新foo函数的插件(将在运行时加载的库)。 我记得我们在学校实现了类似的东西,一个计算器,我们可以在运行时添加新操作,而无需重新启动程序。请参阅dlsym和dlopen。
附加物
在dlclose
插件时要非常小心它仍未在某些活动调用堆栈帧中使用。在Linux上,您可以调用数千次dlopen
(因此您可以接受不dlclose
个插件,但有一些地址空间泄漏。)
答案 1 :(得分:2)
正如你所说“用另一个实现替换抽象类的实现”如果用你的意思,你可以使用运行时多态并用另一个实例更改具体类的实例具体课程。
更具体地说,正是出于此目的,有一种名为Strategy pattern的众所周知的模式。看看wiki page,因为它很好地解释了这一点,即使使用代码示例和图表也是如此。
答案 2 :(得分:0)
虚函数的C ++机制不允许您在运行时更改实现。
但是,您可以使用函数指针在运行时实现任何实现更改。
答案 3 :(得分:0)