如何在没有 [class name] 前缀的情况下在友元函数中使用静态成员::
How can I use static members in friend functions without prefixing [class name]::
我在 Player.h
中有此代码
class Player {
friend void clearBoard();
private:
static char board[4][4][4];
};
和 Player.cpp
中的此代码
char Player::board[4][4][4] = {};
void
clearBoard() {
for (byte i = 0; i < 4; i++)
for (byte j = 0; j < 4; j++)
for (byte k = 0; k < 4; k++)
board[i][j][k] = ' ';
}
所以在编译期间我得到一个错误
Player.cpp:37:9: error: ‘board’ was not declared in this scope
37 | board[i][j][k] = ' ';
| ^~~~~
我在 Player.cpp
中使用 board
一百次,每次使用 Player::
都会对可读性和我的神经产生负面影响。
有办法逃离这个地狱吗?
我试过了
using Player::board;
using Player::board[][][];
用命名空间包围我的 class,然后使用它
命名空间。
没有任何影响。
-
除
之外的所有建议
"just redefine clearBoard()
as static
"
将不胜感激。
总的来说,减少输入并不是提高可读性的方法。写 Player::board
是好的,因为如果你在 Player
之外写 board
那么它从哪里来就不清楚了。话虽如此,如果变量名太长而你懒得重复输入它的名字,你总是可以引入一个别名:
void
clearBoard() {
auto& board = Player::board;
for (byte i = 0; i < 4; i++)
for (byte j = 0; j < 4; j++)
for (byte k = 0; k < 4; k++)
board[i][j][k] = ' ';
}
只要确保别名的范围很短,在这个具体的例子中我看不出有什么好处(引入别名是为了增加输入,而不是减少输入)。
我在 Player.h
class Player {
friend void clearBoard();
private:
static char board[4][4][4];
};
和 Player.cpp
char Player::board[4][4][4] = {};
void
clearBoard() {
for (byte i = 0; i < 4; i++)
for (byte j = 0; j < 4; j++)
for (byte k = 0; k < 4; k++)
board[i][j][k] = ' ';
}
所以在编译期间我得到一个错误
Player.cpp:37:9: error: ‘board’ was not declared in this scope
37 | board[i][j][k] = ' ';
| ^~~~~
我在 Player.cpp
中使用 board
一百次,每次使用 Player::
都会对可读性和我的神经产生负面影响。
有办法逃离这个地狱吗?
我试过了
using Player::board;
using Player::board[][][];
用命名空间包围我的 class,然后使用它 命名空间。
没有任何影响。
除
之外的所有建议"just redefine
clearBoard()
asstatic
"
将不胜感激。
总的来说,减少输入并不是提高可读性的方法。写 Player::board
是好的,因为如果你在 Player
之外写 board
那么它从哪里来就不清楚了。话虽如此,如果变量名太长而你懒得重复输入它的名字,你总是可以引入一个别名:
void
clearBoard() {
auto& board = Player::board;
for (byte i = 0; i < 4; i++)
for (byte j = 0; j < 4; j++)
for (byte k = 0; k < 4; k++)
board[i][j][k] = ' ';
}
只要确保别名的范围很短,在这个具体的例子中我看不出有什么好处(引入别名是为了增加输入,而不是减少输入)。