c++ - 如何在友元函数中使用静态成员而不加前缀 [类名]::
问题描述
我有这个代码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] = ' ';
| ^~~~~
我board
在其中使用了数百次,每次使用都会对可读性和我的神经产生负面影响Player.cpp
。Player::
有没有办法逃离这个地狱?
我试过了
using Player::board;
using Player::board[][][];
用命名空间封闭我的类,然后使用该命名空间。
没有任何影响。
所有建议除了
“只需重新定义
clearBoard()
为static
”
将不胜感激。
解决方案
一般来说,少打字并不是提高可读性的方法。写作Player::board
很好,因为如果你board
在外面写作,Player
就不清楚它来自哪里。话虽如此,如果变量名太长并且你懒得重复输入它的名字,你总是可以引入一个别名:
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] = ' ';
}
只要确保别名的范围很短,在这个具体的例子中我看不到好处(引入别名是更多的打字,而不是更少)。
推荐阅读
- node.js - 如何使用用两种不同语言(Flask、Node.js)编写的后端 docker 在单个服务器上运行
- android - 使用 customword 数组适配器而不是资源字符串数组 KOTLIN
- javascript - 询问如何在 Telegram 中为内联查询创建数组
- r - 在 R 中选择多个历史日期后,Rvest Web 抓取
- c++ - 将 [[no_unique_address]] 与空基类继承组合时得到意外结果
- go - 使用 GORM 将接口设置为具有许多实现的属性
- javascript - babel 如何理解何时导入本地路径以及何时从同名库中导入?
- angular - 根据输入值更改输出类型
- jq - 使用 JQ 将 JSON 对象转换为数组
- python - 如何从选定的 Tkinter 单选按钮获取文本标签?