Я перевожу приложение с 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 ++, а затем используйте эквивалентный лямбда-код в коде 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)));
Вы можете создать действие как это:
Action<Aircraft, Time> airCraftMover = (a,t) => a.Accelerate(new Velocity(vx, vy));
Затем это можно передать и применить к самолетам по желанию.
Чтобы использовать его на самолете, просто вызовите действие как метод:
airCraftMover(aircraft, time);