首页 > 解决方案 > 如何避免函数中的参数过多。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 个参数。

这对游戏来说是正确的还是一种不好的做法?请告诉我如何解决这个问题。

抱歉英语不好。非常感谢您的阅读。

标签: c++parametersargumentsgame-engine

解决方案


只有当您在程序中大量调用函数时,有太多参数才是不好的,因为您付出了将函数的参数放入堆栈的成本以及函数调用的间接性。

如果您不经常调用这些函数,则不要费心打包变量。

如果您需要打包变量,您可以将它们放入 astruct并将单个参数传递给函数(通常是避免复制的引用)!


推荐阅读