如何在需要时互换不同的操作员?
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);
}
假设我有 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);
}