1

我正在将应用程序从 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;
};
4

2 回答 2

5

在 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)));
于 2013-10-29T14:06:54.117 回答
0

你可以像这样创建一个动作:

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

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

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

airCraftMover(aircraft, time);
于 2013-10-29T14:31:53.763 回答