C ++编写代码内的代码?

时间:2014-09-15 23:42:17

标签: c++ windows com

我有一个简单的AI程序,我想添加命令"添加命令"这实际上是从执行程序中获取源代码的机会。反正有没有这样做?我以为我会使用我的代码块预先构建字符串,例如:

else if (input == "what are you?" || input == "What are you?")
            {
                cout << "I am a multi-purpose, artificial intelligence program designed to help simplify life." << endl;
                ISpVoice * pVoice = NULL;

                if (FAILED(::CoInitialize(NULL)))
                    return FALSE;

                HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
                if (SUCCEEDED(hr))
                {
                    hr = pVoice->Speak(L"I am a multi-purpose, artificial intelligence program designed to help simplify life.", 0, NULL);
                }
            }

然后让命令询问输入可能性和输出。

这是可行的事情还是仅仅是我内心的StarTrek粉丝接管我的实用性?

3 个答案:

答案 0 :(得分:1)

C ++是编译的,而不是解释的。因此,在编译发生后,你基本上没有希望改变代码。

但是,您可以使用回调/委托模式以及将指针传递给函数和类...

答案 1 :(得分:0)

是的,您可以在运行时更改程序执行。这些被称为 hooks

例如,当操作系统收到一个事件时,它会遍历它的&#34;挂钩&#34;列表,通知它们事件。

可以附加一些钩子,而其他钩子是菊花链式的。

以键盘驱动程序为例。让我们假设有一个在按键发生时调用的向量。安装程序将地址保存在向量中,并将驱动程序的地址写入向量中。然后,安装程序将向量中的原始地址提供给驱动程序。这使得驾驶员首先优先于按键。然后,驱动程序使用按键数据(原始数据或修改数据)从向量中调用地址。有些病毒也以这种方式工作。

困难重大的问题是即时创建新代码。如果要动态生成新的C ++代码,您将运行编译器生成代码并找出如何替换或将其连接到您的程序。解释性语言更适合这种情况。

使用C ++时,您的项目并非不可能,只需要做很多工作。

答案 2 :(得分:0)

最简单的解决方案是根据需要更改程序的源代码,然后在程序退出时启动编译器以重建可执行文件。这有点对时间敏感,因为在应用程序完全关闭之前,构建不应该完成。使用atexit处理程序可以帮助确保在关闭过程的后期启动构建。

这样,每次运行时都会得到一个新程序,但程序在运行时不会改变