- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
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/
我在让“@header”或任何其他@规则在ANTLR中工作时遇到麻烦。具有非常基本的语法,如下所示: grammar test; options { language = CSharp2;
我对来源和寄宿有疑问 我有一个ajax页面“Page A”,它将称为ajax提要“Page B” 我看到来自ajax调用的“页面B”的请求 header 具有源“http://mydomain.com
我在 pandas 中使用了数据透视表并获得了所需的数据框格式,但现在我有两行标题。数据透视表后的结果数据框如下: scenario Actual Plan
我在 pandas 中使用了数据透视表并获得了所需的数据框格式,但现在我有两行标题。数据透视表后的结果数据框如下: scenario Actual Plan
我想在主机将它们发送到网络之前修改数据包头(IP 头、TCP 头)。 例如,如果我使用 firefox 进行浏览,那么我想拦截所有来自 firefox 的数据包并修改 IP/TCP header ,然
我的 header 内容被包装到#header 中,但是当我设置边框显示结构时,它显示我的#header 的内容出现在#header 本身之后。可能是什么问题?这是我的代码: #header { bo
我是一名 Web 开发人员,使用过 PHP 和 .NET。有一年多的 Web 工作经验,我一直无法彻底了解浏览器缓存功能,希望这里的 Web Gurus 可以帮助我。我心中的问题是: 浏览器实际上是如
伙计们,我有一个问题,我不知道如何在一个 header 中连接多个 header ,我们称它为“主 header ”并使用该 header 中的函数,例如 // A.h #include class
我有一个包含 SOAP 消息的 XMLHTTPRequest。 我想添加用于标识消息并将由 C# Web 服务使用的 guid。 GUID 的目标是识别特定用户,并应护送所有用户请求以在服务器上进行身
我一直在阅读粘性标题,这是我目前所发现的。第一个粘性 header 效果很好,但是当它遇到第一个 header 时,我如何向上滚动第一个 header 并使第二个 header 卡住? http://
我想将当前基于 TableView 的数据网格转换为新的 UICollectionView 类。 这就是我当前的网格的样子: 我的网格有两个标题: 年份(2006a、2007a 等)和 类型(“收入”
我目前正在使用 Apollo 服务器。我正在尝试在响应 header 中设置一个属性。并且此属性是从客户端 graphQL 请求 header 中检索的。 我在网上查了一下。并看到了诸如使用插件或扩展
我的 Controller 的方法需要设置一个标题,例如X-Authorization .创建新对象( store Action )后,我执行转发以显示新创建的对象( show Action ): $
我正在研究一些关于 VLAN 的事情,发现了 VLAN 标签 和 header 。 如果我们有标准 802.3 以太网帧 的 MTU(1518 字节), header 802.3 中包含什么? 另外,
我是放心和 Java 的新手,我正在尝试做一个非常基本的测试来检查 API 的响应是否为 200 ok。 谁能告诉我我需要在下面的脚本中更改什么才能传递多个 header Id、Key 和 ConId
在我的项目中,我需要知道 zlib header 是什么样的。我听说它相当简单,但我找不到 zlib header 的任何描述。 例如,它是否包含魔数(Magic Number)? 最佳答案 zlib
我正在使用 JMeter 测试 HTTP 服务器,该服务器接受并验证 APIKey 并在成功时返回一个有时限的 token 。如果我有 token ,我想发送一个 token ;如果没有,我想发送一个
以太网 header 是什么样的? 是吗: 1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|
我们的应用程序支持 CORS 配置 header 。我在两个不同的主机上分别配置了 testApp。两种设置都相互独立工作。host1 上的应用程序配置有 CORS header Access-Con
tlhelp32.h 不包含 windows.h 本身是有原因的吗?我一直在与大量的编译器错误作斗争,因为我在包含 tlhelp32.h 之后包含了 windows.h。这是设计决定还是出于什么原因?
我是一名优秀的程序员,十分优秀!