c# - C# 中匿名 lambda 函数的 C++ 捕获子句等效项

标签 c# c++ lambda delegates

我目前正在尝试将我用 C++ 编写的项目移植到 C# 框架。我遇到了将函数传递给另一个类的问题。

我有一个类 PickupDef,它在其构造函数中采用委托(delegate)函数作为参数。在 C++ 版本中,我会像这样传递函数:

[&]() { hero->changeHP(10); }

其中 hero 是调用类中动态分配的对象。我试过在 C# 版本中使用它:

delegate { hero.changeHP(10); }

但 C# 无法识别 hero 对象。似乎我无法确定它的范围以从调用类中获取引用。

有没有办法在 C# 中获得 C++ [&]() 的功能?我可以将对英雄对象的引用传递给 PickupDef,但这需要对当前系统进行全面检查。

最佳答案

C# 中的 lambda 是这样写的:

() => hero.changeHP(10);

由于这是一个无参数的 lambda,您可以将其作为 Action 传递例如

Action setHpTo10 = () => hero.changeHP(10);

Lambda 固有地捕获您在 C# 中引用的变量。

关于c# - C# 中匿名 lambda 函数的 C++ 捕获子句等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31330712/

相关文章:

c# - 将字节数组保存为 Pgn 或 Jpg

c++ - Lambda 返回空字符串

c++ - 如何避免捕获的成员在 C++11 的 lambda 表达式中被任意表达式初始化?

Python lambda 函数输出 function_main 消息而不是数字?

c# - 为什么百分比格式说明符乘以 100?

c# - SOLID 原则 : interfaces vs. 抽象类

c# - 我们可以在 C# 中在运行时动态交换程序集吗

c++ - 将临时对象移动到 vector 中

c++ - C++中的空动态数组

c++ - 定义运算符重载时删除 vector 的对象元素时出错