在运行时更改应用程序的逻辑
Change the logic of application at run-time
我想知道是否有可能在运行时更改应用程序的逻辑?也许我们可以用另一个实现代替抽象类的实现?或者我们可以在运行时替换一个共享库…
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
相关文章:
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 在程序运行时监视 VxWorks 中的任务 CPU 利用率
- boost::asio::io_service 在线程中,不会在应用程序退出时退出
- 为什么程序运行时我的第二个循环不执行?
- 从 ParaView 构建自定义 Qt 应用程序示例时出错
- 在应用程序启动时停靠 QDockWidget?
- 如何在 c++ 程序运行时隐藏控制台?
- 在应用程序启动时读取文件
- 通过C++应用程序运行 shell 脚本始于 JAVA
- 从 WebAPI 项目运行静态类时出现 StackOverflow 异常 - 从控制台应用程序运行时工作正常
- 运行在DLL中的工作线程在应用程序关闭时被终止,然后才能正常关闭它们
- 应用程序运行时的 C++ 重新加载功能
- Cinder 无法在应用程序运行时更新窗口的标题
- 在应用程序运行时禁用WER
- cv::imshow在GUI应用程序运行时阻塞线程
- 当将应用程序作为启动的守护程序运行时,C++ 库中的信号 10 (SIGBUS)
- VBA运行声明的函数但C++控制台应用程序运行正常时堆损坏
- 如何防止窗口在我的 c++ 应用程序运行时进入睡眠状态
- 如何在最后一个窗口关闭时保持应用程序运行
- 检查c++应用程序运行时的各种内存使用情况