因此,我在几个月前观看了这段视频,其中 Epic 展示了他们新的虚幻引擎 4 开发人员功能。抱歉,我找不到视频,但我会尽力解释。
引起我注意的一个特性是 C++“即时”修改和编译。这家伙展示了他是如何在编辑器中玩游戏的,并修改了代码中的一些变量,保存它,所做的更改立即反射(reflect)在游戏中。
所以我一直在想...如何实现这一目标?目前我可以想到两种可能的方法:要么是骗局,要么是“c 风格”——脚本语言而不是 C++ 本身,要么是共享库(读取:DLL)魔术。
这是我自己尝试的东西(简化):
for(;;)
{
Move DLL from build directory to execution directory
Link to DLL using LoadLibrary() / dlopen() and fetch a pointer to function "foo()" from it
for(;;)
{
Call the function "foo()" found in the dll
Check the source of the dll for changes
If it has changed, attempt to compile
On succesfull compile, break
}
Unload DLL with FreeLibrary() / dlclose()
}
现在这似乎行得通,但我不禁想知道还有哪些其他方法? 这种方法与使用脚本语言相比如何?
最佳答案
是的,“热代码修改”绝对是许多 IDE/调试器在某种程度上可以拥有的一种能力。这是一篇好文章:
这是 MSVS“编辑并继续”的手册页:
关于运行时的 C++ 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15751377/