One header for multiple cpp-files
我读过这篇文章,并认为我理解以后可能出现的问题。然而,尽管如此,我相信我的问题可能是一个特例,我想知道是否有人有不同的建议。
我已经在服务器和客户端上工作了很长时间,原本应该是全方位的" CommandManager"班级已成为一个可怕的怪物。它被设计为拦截从可能数百个客户端收到的消息,解析它,找出命令是什么,并将其发送到正确的类中所需的功能。
这是通过在解码标头之后过滤掉消息,然后通过匹配"纯文本"来完成的。命令收到预先加载了所有命令的std :: map。
这意味着对于我实现的每个不同的命令,我需要一个匹配的成员函数。这原本很好..但现在我超过100个命令,我甚至没有接近完成。我在.cpp文件中达到了4,000行代码,而且我开始有问题跟踪它。尽管拥有相当不错的命名标准,但它仍然成为许多代码的全部内容,我宁愿分散它。
我仍然认为自己是一般编程和C ++的新手。
在设计大型项目时,是否有其他人遇到过这些问题,他们采取了哪些措施来解决这些问题?
答案 0 :(得分:2)
(...)本来应该是无所不包的 “CommandManager”类已成为一个可怕的怪物。
这通常发生在所谓的“经理”课程中。根据经验,我会说“管理者”这个词通常表明你不确定这门课的确切目的是什么,最终让课程演变成你在这里描述的内容。
这原本很好..但现在我有超过100个命令, 我甚至没有接近完成。我已经达到了4,000行代码 .cpp文件,我开始有跟踪它的问题 所有
听起来很糟糕。
在设计大型项目时,有没有其他人遇到过这个问题,
是的,大家。这是一个非常普遍的问题。虽然以前每个人都遇到过这个问题,但令人遗憾的是,大多数开发人员都不会认为这是一个问题。这意味着你不再是“编程的新手”,但已经向前迈出了重要的一步。
他们采取了哪些措施来解决这些问题?
重新设计程序,将大类拆分为具有更专业功能的较小类。
现在所有复杂性都存在于一个文件中的事实只是真实问题的一个症状,而真正的问题是整体类的存在。从技术上讲,C ++对单个翻译单元应该有多少个函数定义没有限制(读取:“转换为单个* .cpp文件”)。但我认为在你的情况下将实现分成多个文件并不能真正解决任何问题,只会增加复杂性。 YMMV。
请注意,C ++标准确实有一个关于实现数量的附件,但它是一个提供信息的附件。这是附件B,它说:
因为计算机是有限的,所以C ++实现是不可避免的 他们可以成功处理的程序数量有限。
(...)
建议将每个数量后面的括号内的数字作为 该数量的最小值。但是,这些数量只是 指南并不确定合规性。
一个有趣的指南是:
成员在一个班级[4 096]中宣布。
因此,正如您所看到的,您仍远未达到 可能变得至关重要的成员数量。你有一个风格或程序设计问题,而不是一个很难的技术问题。
答案 1 :(得分:1)
将实施代码误用于多个.cpp
文件的主要原因是从工具中部分生成代码。
原则上没有任何问题。
答案 2 :(得分:1)
没有规则说类的所有成员函数都必须驻留在同一个源文件中。只要它们都包含定义类的相同头文件,它们都可以根据需要相互引用。
我建议按功能分离成员函数。例如,有一个文件具有网络相关成员,一个文件处理解析,一个处理处理,等等。如果您有任何私有成员仅由一个或两个其他成员使用,也将它们放在一起。