如何在需要时互换不同的操作员?

How to interchange different operators when needed?

假设我有 4 个条件,如果是左,如果是右,如果是下,如果是上。

我有一个带有 X 和 Y 坐标的理论棋子。

if (LEFT)
{
    X--;
}
else if (RIGHT)
{
    X++;
}
else if (UP)
{
    Y++;
}
else
{
    Y--;
}

这很简单,尽管我无法想象它在任何设置中都是最佳的。 现在,如果移动我的棋子比简单地增加值更难怎么办。

if (LEFT)
{
    for (int i = 0; i < 100; i++)
    {
        // Nice cool algorithm 

    }
}
else if (RIGHT)
{
    for (int i = 0; i < 100; i++)
    {
        // Nice cool algorithm 

    }
}
else if (UP)
{
    for (int i = 0; i < 100; i++)
    {
        // Nice cool algorithm 

    }
}
else
{
    for (int i = 0; i < 100; i++)
    {
    // Nice cool algorithm 

    }
}

现在显然这只是糟糕的编码。本质上是复制和粘贴。所以最终,我的问题是,我在这里缺少 C++ 的哪个方面? 有没有办法 "interchange operators" 就像当条件为 LEFT 时,运算符在 X 上变为“--”,而当条件为 RIGHT 时,它变为“++”。

也许我可以以某种方式将运算符存储为变量,这样操作就在一行上,并且编写了一个算法版本,

X << OPERATORvariable 

这是我能问的最好的问题了。随意告诉我我在错误的地方问这个或那个我对编程一窍不通:)

Now obviously this is just plain bad coding right here. copy and paste essentially.

可能,但你只能简化这么多。

您不能取消对这四个条件的检查。

如果你为这些条件所做的只是 increment/decrement X 和 Y,我不会出太多汗。充其量,您可以将在这些条件下发生的情况抽象为四个函数。

if (LEFT)
{
   moveLeft();
}
else if (RIGHT)
{
   moveRight();
}
else if (UP)
{
   moveUp();
}
else
{
   moveDown();
}

如果您必须在每个函数中循环一些变量,您可以将该操作抽象到另一个函数。

例如:

void doSomethingForEachItem(void (*fun)(...)))
{
   for (int i = 0; i < 100; i++)
   {
      // Call fun for each item
   }
}

void moveLeft()
{
   doSomethingForEachItem(moveLeftFunction);
}