在运行时更改应用程序的逻辑

Change the logic of application at run-time

本文关键字:应用程序 运行时      更新时间:2023-10-16

我想知道是否有可能在运行时更改应用程序的逻辑?也许我们可以用另一个实现代替抽象类的实现?或者我们可以在运行时替换一个共享库…

update: 假设我有两个函数foo(x, y)的实现,并且可以基于strategy pattern使用它们中的任何一个。现在我想知道是否可以在不重新启动应用程序的情况下添加foo(x, y)的第三个实现。

你可以使用一个插件(一个在运行时加载的库)来公开一个新的foo函数。我记得我们在学校里实现了类似的东西,一个计算器,我们可以在运行时添加新的运算,而不必重新启动程序。参见dlsym和dlopen。

附录

dlclose -ing一个插件时,要非常小心,因为它没有在一些活动的调用堆栈帧中使用。在Linux上,您可以调用数千次dlopen(因此您可以接受不使用dlclose的插件,有一些地址空间泄漏)。

完全正确,正如您所说的"用另一个实现替换抽象类的实现"如果您的意思是,您可以使用运行时多态性并将具体类的实例更改为另一组具体类的实例。

更具体地说,有一个众所周知的模式称为策略模式,正是为了这个目的。看一下wiki页面,它很好地解释了这一点,甚至用了一个代码示例和图表。

c++的虚函数机制不允许在运行时更改实现。

但是,您可以在运行时使用函数指针实现任何实现更改。

这是我最近读到的一篇关于自我修改代码的文章:http://mainisusuallyafunction.blogspot.com/2011/11/self-modifying-code-for-debug-tracing.html