gpt4 book ai didi

c++ - 在 C++ 中修改现有函数的任何技术或技巧?

转载 作者:太空宇宙 更新时间:2023-11-03 10:39:10 24 4
gpt4 key购买 nike

在 JavaScript 中,您可以执行如下操作:

function bunny() { alert("The bunny jumped."); }

var oldBunny = bunny;
function bunny() {
oldBunny();
alert("The bunny also ran.");
}

bunny(); // The bunny Jumped. The bunny also ran.

正如您所看到的,旧的“兔子”函数通过复制到一个变量来附加代码,然后重新创建具有相同名称的函数。原函数拷贝运行,新代码也运行。

我希望在 C++ 中复制类似的机制。

现在,在您崩溃并开始解释静态语言和动态语言之间的区别之前,我明白了。我不是在寻找与所提供的相同的东西,但我确实想要类似的东西。

此外,我这样做并不是为了修改现有代码;我希望格式化我自己的源代码,以允许其他用户利用这种机制。

我最初的想法之一可能是在代码中设置各种宏,以后可以由其他文件修改。

另一个想法是创建一个类似于 QT 的信号和插槽系统。虽然我自己不知道如何做这样的事情。

感谢您的阅读;希望大家多提建议。

最佳答案

好吧,如果您认识到 JavaScript 函数的哪些特性使这成为可能,那么在 C++ 中做同样的事情就不难了。在 JavaScript 中,函数也有闭包,而 C++ 中的常规函数​​没有。但是 C++ lambda 是闭包类型的。如果将 bunny 定义为既可以容纳闭包类型的对象又可以重新分配的对象,那么一切就绪。

C++ 标准库为此提供了一个很好的默认选择,形式为 std::function。我们可以按如下方式重写您的原始 JavaScript:

std::function<void()> bunny = [] {
std::cout << "The bunny jumped.\n";
};

auto oldBunny = std::move(bunny);
bunny = [oldBunny] {
oldBunny();
std::cout << "The bunny also ran.\n";
};

bunny();

关于c++ - 在 C++ 中修改现有函数的任何技术或技巧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48513819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com