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++ コードのラムダに置き換えてから、C# コードで同等のラムダを使用します。

編集:ラムダを使用するように変更されたコメントからの C++ コード:

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 に答える