草庐IT

单一职责原则

全部标签

c++ - g++ 在多个文件上比使用 Google mock 的单一文件慢得多

我遇到了一个似乎与g++相关的问题。基本上,当一个程序被拆分成多个文件而不是一个单一的整体文件时,g++需要花费更多的时间来编译它。事实上,如果将单个文件组合在一起并进行编译,它运行起来比在g++命令行上列出单个文件要快得多。比如9个文件,编译需要1分39秒;当我把它们放在一起时,编译只需要13秒。我试过使用strace但它只是卡在cc1plus中;当我使用-f选项时,我仍然无法找出导致问题的原因。我已经隔离了问题。这是重现它的方法。我写了一个非常简单的程序,像这样:voidfunc_01(inti){intj;volatileint*jp;jp=&j;for(;i;i--)++*jp

c++ - 处理许多单一功能的最佳实践

我有很多小功能,每个功能都在做一件事情,例如:pingServer,checkUserValidAccount,countDistance。将每个函数都包装到一个类中是不值得的。在C++中处理这么多不同的小函数的最佳实践是什么?也许编写一些名为Helpers的类,例如NetworkHelpers? 最佳答案 将它们放在namespace中是一种选择。我不认为需要上课。一个类的实例意味着表示一个状态,但你描述的是一堆自由函数,所以是一个无状态系统。“将每个函数都包装到一个类中是不值得的。”-这不是决定不编写类(class)的有效论据。

c++ - c++标准库的设计原则是什么?

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭11年前。所以standardc++library主要包含大概7类,使其成为标准的基本原理/原型(prototype)是什么?顺便说一句,套接字编程相关的东西在c++标准库中属于哪一类?

c++ - 单一虚拟继承

我理解基类的虚拟继承在多个派生类之间创建了一个公共(public)共享基类,从而解决了DDD问题。如果我的基类只有一个派生类,那么虚拟继承基类或非虚拟继承基类时有区别吗?基本上我试图理解查询中提供的解释Isitpossibletoforbidderivingfromaclassatcompiletime?其中Usage_lock基类实际上是继承的,以防止从类Usable派生。如果我删除这个虚拟键,行为就会改变,即我能够从Usable派生子类。所以我想了解单继承场景中虚拟键造成的差异。 最佳答案 单个虚拟继承情况下的主要区别在于,只有

c++ - C++ 中的单一职责——我应该使用友元类还是更多访问器来实现它?

我希望遵循C++中的单一职责原则。然而,随着我的分类,似乎为了让类(class)能够“看到”彼此,我有以下选择:为每个类添加更多访问器让类(class)成为彼此的friend改进设计(也许我必须做1或2的事实表明我的设计存在缺陷)friend与访问者的问题之前可能已经讨论过,但我不知道在实现单一职责方面是否更有利。 最佳答案 我一直认为这条规则是废话。大多数类都有几个职责,并且没有造成伤害。考虑一个银行账户类——它可能有以下职责:维护客户详细信息允许借记和贷记交易提供当前余额向安全部门报告可疑交易当然,这些职责可能会使用帐户组成的其

c++ - 为什么单一虚拟继承不足以解决可怕的菱形继承(钻石问题)?

structB{inti;};structD1:virtualB{};structD2:B{};//上面的代码,编译器仍然要求D2也是virtual:DDd;d.i=0;//error:requestformember`i'isambiguous我不明白的是,一旦您提示编译器B相对于DD是virtual(通过D1)那么为什么i仍然是模棱两可的?(如果我没记错的话,较旧的VC++(2006年)足以通过单个virtual继承来解决这个问题) 最佳答案 B对于DD不是虚拟的-它对于D1是虚拟的。在创建D2时,它包含B的完整拷贝。所以现在D

c++ - 单一生产者、单一消费者环形缓冲区的最小限制内存排序?

我有一个RingBuffer,它为一个消费者和一个生产者提供服务,并使用两个整数来检测新数据:_lastReadIndex_lastWrittenIndex所以当这两个值不相等时,ringbuffer中有未读数据。当一个项目被添加到环形缓冲区时,生产者递增(和循环缓冲区大小的模数)_lastWrittenIndex。消费者自旋,读取两个值,检查新数据,当有新数据时,它将递增(和模数)_lastReadIndex。三个突出显示的术语强调了关于多线程和内存屏障的要求。考虑到Intel的内存模型,我可以将此设计的内存排序放宽到什么程度?我相信英特尔的内存模型允许加载与早期存储重新排序到不同的

软件开发、设计、架构的五大原则

唯一不变的就是变化本身。我们经常讲的系统、子系统、模块、组件、类、函数就是从逻辑上将软件一步步分解为更细微的部分,即逻辑单元,分而治之,复杂问题拆解为若干简单问题,逐个解决。逻辑单元内部、外部的交互会产生依赖,从而产生了内聚、耦合概念。内聚主要描述逻辑单元内部,耦合主要描述逻辑单元之间的关系。我们经常讲的高内聚,低耦合,如何做到,做到的标准是什么?这就是开发、设计、架构的五大原则所体现出的价值,最终达到高内聚,低耦合的软件目标。耦合逻辑单元之间存在依赖,导致改动可能会互相影响,关系越紧密,耦合越强,逻辑单元独立性越差。比如模块A直接操作了模块B中数据,则视为强耦合,若A只是通过数据与模块B交互

C++游戏、类设计和职责

我刚刚阅读了输入主题时出现的一些相关问题,因此我将尽量不再重复。我最近开始重新审视大约两三年前开始的一个学习项目-洛克人引擎的C++端口。是的,我使用了撕裂的Sprite。我还在使用游戏引擎库进行绘图、音乐和输入。我的原始代码很糟糕。虽然它可以(但勉强)被称为OO,但它完全没有捕获要点。我已经开始添加接口(interface)之类的东西,并删除了大量重复的代码。有些事情我不确定,因为游戏设计有时会变得非常复杂。代表我的游戏库的对象目前是全局的(我知道全局通常是不好的)因为许多对象可能在这里和那里依赖它来加载他们的艺术或音乐。将对象从全局范围中拉出的最佳方法是什么,而不必将五十个参数传递

c++ - 智能指针是否破坏了头文件中最小化#includes 的原则?

我更愿意尽量减少使用#include在我的头文件中,尽可能使用前向声明,我相信这被认为是好的做法。如果我有一个像这样的方法声明,它会很好用:boolIsFlagSet(MyObject*pObj);但是如果我有typedefPtrMyObjectPtr在MyObject.hAPI更改为:boolIsFlagSet(MyObjectPtrpObj);我现在有到#include"MyObject.h"吗??有什么办法解决这个问题,还是这只是使用智能指针的代价? 最佳答案 不,您不必这样做。您可以为不完整的类定义类型别名,模板参数可以是不