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

时间:2011-12-07 10:43:09

标签: c++ linux runtime

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

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

4 个答案:

答案 0 :(得分:4)

您可以使用暴露新foo函数的插件(将在运行时加载的库)。 我记得我们在学校实现了类似的东西,一个计算器,我们可以在运行时添加新操作,而无需重新启动程序。请参阅dlsymdlopen

附加物

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

答案 1 :(得分:2)

正如你所说“用另一个实现替换抽象类的实现”如果用你的意思,你可以使用运行时多态并用另一个实例更改具体类的实例具体课程。

更具体地说,正是出于此目的,有一种名为Strategy pattern的众所周知的模式。看看wiki page,因为它很好地解释了这一点,即使使用代码示例和图表也是如此。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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