如何在 C# 中表达函子

How to express functors in c#?

本文关键字:      更新时间:2023-10-16

我正在将应用程序从C++转换为.NET/C#。但是,我正在努力了解如何在 C# 中表达C++函子。

将以下表达式转换为 C# 的最佳方法是什么?

struct AircraftMover
{
    AircraftMover(float vx, float vy)
    : velocity(vx, vy)
    {
    }
    void operator() (Aircraft& aircraft, sf::Time) const
    {
        aircraft.accelerate(velocity);
    }
    sf::Vector2f velocity;
};

在C++代码中将函子替换为 lambda,然后在 C# 代码中使用等效的 lambda。

编辑:您的C++代码从修改为使用 lambdas 的注释中:

void Player::initializeActions() {
  const float playerSpeed = 200.f;
  mActionBinding[MoveLeft].action =
      derivedAction<Aircraft>([=](Aircraft& a, Time) { a.accelerate(Vector2f(-playerSpeed, 0.f)); });
  ...
}

等效的 C# 代码如下所示:

mActionBinding[MoveLeft].action = 
    new derivedAction<Aircraft>((Aircraft a, Time t) => a.accelerate(new Vector2f(-playerSpeed, 0.f)));

您可以创建如下操作:

Action<Aircraft, Time> airCraftMover = (a,t) => a.Accelerate(new Velocity(vx, vy));

然后可以随意传递并应用于飞机。

要在飞机上使用它,只需像调用方法一样调用 Action:

airCraftMover(aircraft, time);
相关文章:
  • 没有找到相关文章