c++ - 如何避免函数中的参数过多。C++
问题描述
我正在用我的 OpenGL c++ 制作的小游戏引擎制作一个小游戏。我必须制作许多类,如 Camera、BatchRenderer、AudioEngine、ParticleEngine、Level、Player、Zombie、Humans 等。现在 Player 必须与 Camera、BatchRenderer、AudioEngine、ParticleEngine、Level 类中的关卡数据、Zombie、Human 等类进行交互等。我通过引用传递其中的大部分,这些引用在我的主游戏类中初始化。
// 在 Main Game 类和 Player 中创建的 AudioEngine 和 ParticleEngine 需要播放声音和模拟粒子。渲染播放器需要 TextureID、位置、半径(大小)、旋转、深度和颜色。
Player::Player(AudioEngine& a_audioEngine, ParticleEngine& a_particleEngine
GLuint a_textureID, glm::vec2 a_position, float a_radius,
float a_rotation, float a_depth, Color a_color)
{...}
// 用于检查玩家是否在视野中的相机。levelData,僵尸,人类检查与 Player 的碰撞检测。
void Player::update(Camera& camera, std::vector<std::string>& levelData,
std::vector<Zombie>& zombies, std::vector<Human>& humans,
float deltaTime)
在这里你可以看到太多的参数被传递给玩家类,而且未来还需要更多。但是我读到很多人说在一个函数中有两个或三个以上的参数是不好的。在我的游戏中,有许多类需要超过 5 或 6 个参数。
这对游戏来说是正确的还是一种不好的做法?请告诉我如何解决这个问题。
抱歉英语不好。非常感谢您的阅读。
解决方案
只有当您在程序中大量调用函数时,有太多参数才是不好的,因为您付出了将函数的参数放入堆栈的成本以及函数调用的间接性。
如果您不经常调用这些函数,则不要费心打包变量。
如果您需要打包变量,您可以将它们放入 astruct
并将单个参数传递给函数(通常是避免复制的引用)!
推荐阅读
- python - 从第 28 行开始拆分 CSV 文件
- c# - Azure 应用服务上的 ASP.NET Core MVC Azure AD 身份验证循环
- android - 尽管 PagingSource 记录了正确的数据,但 Fragment 中的 Recycler View 没有显示任何数据
- css - 动态css网格布局,保持一些元素在同一行
- c# - Ryzen 与 i7 多线程性能对比
- python - 在 for 循环中安排
- google-cloud-platform - 数据流:Apache Beam 警告:apache_beam.utils.retry:使用指数退避重试:
- ssl - openssl_encrypt():使用空的初始化向量 (iv) 可能不安全且不推荐错误 phpmyadmin
- r - 稀疏矩阵(非零)
- c# - 原图找不到部分图片