在运行时更改当前未使用的类实现

Change a currently non used class implementation at runtime

本文关键字:未使用 实现 运行时      更新时间:2023-10-16

我有一个C++代码正在一个大文件(大约15 GB)上执行。该代码有两个阶段,第一阶段需要很长时间才能完成。但与此同时,我为它的第二阶段获得了更好的实现技术,不想从一开始就重新启动整个执行。这两个阶段根据实际使用的两个类进行分类。从中获得一个想法:

Parser.parse(filePath);    // phase one
Processor.processAndLog(); // phase two

那么,在Processor类开始执行之前,是否有一些方法可以更改它的实现?阶段1的结束(甚至完成了多少)可以与我打印的一些不时的消息(比如日志)区分开来。

如果Processor.processAndLog是成员函数指针,则可以在调用之前随时更改它。

另一种选择是让Processor.prrocessAndLog作为其他函数的包装函数——一个调度函数。

还有挂接函数的问题。有一个图书馆叫绕路。仅当您无法更改程序的源代码时才使用此选项。

如果我理解正确的话:您有一个程序当前正在运行,但尚未执行特定类中的代码。您希望找到一种方法来更新它,以便在不停止程序的情况下为该类使用新版本的代码。

理论上这是可以做到的。但在实践中,这可能比它的价值要麻烦得多,尤其是如果这是一次性需求的话。C++不是为这种事情而设计的。这并不是说在进程的内存中有一个简单的人类可读的源代码可以很容易地被覆盖。

正确地做到这一点几乎肯定需要大量的时间和精力,很可能需要大量的实验和追踪和错误。如果你做错了什么(这可能是第一次),那么你可能只是破坏了你的过程和结果,因此无论如何都需要重新启动它。

我不知道你的流程目前需要多长时间,但试图弄清楚如何实现这个想法可能需要更多的时间,而不仅仅是在构建新版本的程序后重新启动流程。