gpt4 book ai didi

c++ - 何时可以将多个源文件与单个 header 一起使用

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:52:06 24 4
gpt4 key购买 nike

One header for multiple cpp-files

我已经阅读了这篇文章,并且认为我理解了以后可能出现的问题。然而,尽管如此,我相信我的问题可能是一个特例,我想知道是否有人有不同的建议。

我长期从事服务器和客户端的工作,原本应该是包罗万象的“CommandManager”类变成了一个可怕的怪物。它旨在拦截可能来自数百个客户端的消息,对其进行解析,找出命令是什么,并将其发送到正确类中的所需函数。

这是通过在解码 header 后过滤掉消息,然后将接收到的“纯文本”命令与预加载了所有命令的 std::map 相匹配来完成的。

这意味着对于我实现的每个不同的命令,我都需要一个匹配的成员函数。最初效果很好......但现在我有超过 100 个命令,而且我什至没有接近完成。我在 .cpp 文件中达到了 4,000 行代码,我开始难以跟踪所有代码。尽管有不错的命名标准,但它正在成为我希望散布的大量代码的统称。

我仍然认为自己是一般编程和 C++ 方面的大新手。

过去有没有其他人在设计大型项目时遇到过这些问题,他们做了什么来解决这些问题?

最佳答案

(...) what was originally supposed to be the all-encompassing "CommandManager" class has become a terrible monster.

这通常发生在所谓的“管理器”类中。根据经验,我会说“经理”这个词本身通常表明您不确定类(class)的确切目的是什么,最终允许类(class)演变成您在这里描述的内容。

This worked out fine originally.. but now I'm at over 100 commands, and I'm not even close to done. I'm reaching 4,000 lines of code in the .cpp file, and I'm starting to have issues keeping track of it all.

听起来很糟糕。

Has anyone else ran into this problems in the past while designing a large project,

是的,每个人。这是一个非常普遍的问题。虽然每个人以前都遇到过这个问题,但可悲的事实是大多数开发人员都没有意识到这是一个问题。这意味着你不再是“编程大白菜”,而是已经向前迈出了重要的一步。

and what have they done to fix these issues?

重新设计程序,将大类拆分为具有更专业功能的小类。

现在所有的复杂性都集中在一个文件中这一事实只是真正问题的一个症状,而真正的问题是单一类的存在。从技术上讲,C++ 对于应将多少函数定义放入单个翻译单元(阅读:“放入单个 *.cpp 文件”)没有限制。但我认为在您的情况下,将实现拆分为多个文件并不能真正解决任何问题,只会增加复杂性。 YMMV.

请注意,C++ 标准确实有一个关于实现数量的附件,但它是一个信息性附件。它是附件 B,上面写着:

Because computers are finite, C++ implementations are inevitably limited in the size of the programs they can successfully process.

(...)

The bracketed number following each quantity is recommended as the minimum for that quantity. However, these quantities are only guidelines and do not determine compliance.

一个有趣的指南是:

Members declared in a single class [4 096].

因此,如您所见,您还远未达到可能变得关键的成员数量。您有风格或程序设计问题,而不是技术难题。

关于c++ - 何时可以将多个源文件与单个 header 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33595938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com