如何在 C# 中表达函子
How to express functors in c#?
我正在将应用程序从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);
相关文章:
- 没有找到相关文章