如何在没有 [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:: 都会对可读性和我的神经产生负面影响。

有办法逃离这个地狱吗?

我试过了

  1. using Player::board;

  2. using Player::board[][][];

  3. 用命名空间包围我的 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] = ' ';
}

只要确保别名的范围很短,在这个具体的例子中我看不出有什么好处(引入别名是为了增加输入,而不是减少输入)。