如何在C#中表达函子?

Dav*_*nez 1 c# c++ functor code-translation

我正在将应用程序从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;
};
Run Code Online (Sandbox Code Playgroud)

mat*_*ort 5

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

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

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

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

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