C++ 使用参数不明确的函数

C++ 使用参数不明确的函数,c++,coding-style,C++,Coding Style,我想实现一个walk(x,y)函数,让精灵上下左右移动一个单位。游戏板存储在一个数组中,每个磁贴位于索引y*width+x处。因此,只有知道当前位置、宽度以及x和y,我才能立即计算出新位置(并检查障碍物或其他东西)。这对我来说似乎是一个很好的解决方案,但这是一个糟糕的代码吗?还是在这种情况下可以 (更易于阅读的解决方案是使用“direction”作为参数,但这会增加函数本身的定义,这也可能降低性能) 提前谢谢 如果您的walk(x,y)功能允许输入超过1的距离,则也应实现这种情况。否则,您将不得

我想实现一个
walk(x,y)
函数,让精灵上下左右移动一个单位。游戏板存储在一个数组中,每个磁贴位于索引
y*width+x
处。因此,只有知道当前位置、宽度以及x和y,我才能立即计算出新位置(并检查障碍物或其他东西)。这对我来说似乎是一个很好的解决方案,但这是一个糟糕的代码吗?还是在这种情况下可以

(更易于阅读的解决方案是使用
“direction”
作为参数,但这会增加函数本身的定义,这也可能降低性能)

提前谢谢

如果您的
walk(x,y)
功能允许输入超过1的距离,则也应实现这种情况。否则,您将不得不检查错误的输入。我肯定会说,编写只部分实现的函数是一种糟糕的做法

如果您只想移动单个磁贴,有一个非常优雅的解决方案:

enum类方向:未签名{
上、右、下、左
};
constexpr int X[4]{
0, 1, 0, -1
};
constexpr int Y[4]{
1, 0, -1, 0
};
无效移动(方向d){
int x=x[静态(d)];
int y=y[静态(d)];
//按x和y移动
}
在这种情况下,性能成本接近于零。你真的不必要地担心。您也可以使用一个表,而不是两个单独的表:

void移动(方向d){
int x=x[静态(d)];
int y=X[(静态(d)+1)和0b11];
//按x和y移动
}

您可以使用矩阵。问题不在于如何存储电路板。问题是如果使用<代码> FAX(x,y)< /C>会被认为是坏习惯,如果我应该使用<代码>走(“方向”)<代码>,即使这个函数为函数本身增加代码,问题是如果你问十个C++开发者是否“被认为是坏习惯”,你会得到十一个不同的答案。但是步行(“方向”)给了用户更多的信息。好吧,我只是想确保我不会养成一个很坏的习惯,以后可能会把我弄得一团糟。TY我对枚举类不太熟悉,但是如果我假设
向上、向右、向下、向左
自动初始化为数字
0、1、2、3
,我错了吗?是的,当没有给出显式值时,枚举从0开始计数。您可以通过将枚举强制转换为整数类型来获取枚举的值,例如本例中的
size\t