草庐IT

虚拟空间

全部标签

c++ - 在单元测试时如何模拟基类的非重写、虚拟/非虚拟方法?

如何在基类中模拟非重写的非虚拟/虚拟方法并仅测试派生类的方法?这里的案例是:我有一个基类X,它具有连接到外部服务器并执行其他一些操作的方法。我有一个派生自X的类Y。我在Y中实现了两个方法。我只想对它们进行单元测试。我只担心这两种方法,我不希望调用基类实现来连接到服务器等(我想模拟这些方法,但我不想在我的派生类中重写这些方法Y并且什么也不做,因为它是生产代码)。关于如何单独对这些方法进行单元测试有什么想法吗?P.S:我正在使用C++/GTest进行开发和单元测试。 最佳答案 一种选择是在测试目录中创建一个Mock_base类和从它继承

c++ - OpenCV皮肤检测色彩空间?

我在HSV图像上使用直方图反投影来检测皮肤。您会推荐哪种图像作为用于皮肤检测的最佳图像类型?(为了最好和最准确的检测)HSV、RGB或YCbCr?每种图像的优点和缺点是什么?您认为哪种图像最适合这种特定情况?PS:由于我的程序是如何制作的,所以照明并不是那么重要 最佳答案 查看skindetection的Google学术搜索结果.有几篇关于如何检测皮肤的好论文。This纸是一个很好的调查。另外,this论文讨论了皮肤检测的最佳色彩空间。该论文还认为,所有颜色空间都提供相同数量的信息,但对于皮肤检测,某些颜色空间比其他颜色空间更直观。

c++ - 命名空间 std 中所有符号的列表

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭6年前。Improvethisquestion我在哪里可以找到在命名空间std中声明的所有符号的列表?实在找不到,不知道去哪里找。

c++ - 在虚拟继承中交换和复制成语的正确方法是什么?

考虑经典的虚拟继承菱形层次结构。我想知道在这种层次结构中copy-and-swap习语的正确实现是什么。example有点人为-而且它不是很聪明-因为它可以很好地处理A、B、D类的默认复制语义。但只是为了说明问题-请忘记示例弱点并提供解决方案。所以我有从2个基类(B,B)派生的类D-每个B类实际上都继承自A类。每个类都有使用copy-and-swap习语的非平凡复制语义。最派生的D类在使用这个习惯用法时有问题。当它调用B和B交换方法时-它交换虚拟基类成员两次-所以A子对象保持不变!!!答:classA{public:A(constchar*s):s(s){}A(constA&o):s(

c++ - std::bad_alloc 不进入交换空间

我试图理解为什么当我似乎有足够的(虚拟?)可用内存时我会收到std::bad_alloc异常。本质上,我有一个素数生成器(Eratosthenes筛法(尚未分段)),我在其中为指示器数组更新bool值,然后为我在命令行指定的范围内找到的素数更新整数。我有1GB内存(其中一些会被我的操作系统(ubuntu10.04)占用,并且可能其中一些不可用作堆内存(我在这里错了吗?))和2.8GB交换空间(我相信这是在安装Ubuntu时为我自动设置的)如果我将上限设置为600000000,那么我需要0.6GB的内存用于我的指标数组和大约30000000*4字节(略微高估,因为有26355867个小于

C++ 使用命名空间声明

所以有一段时间我一直在使用...usingnamespace::std;最近我意识到这应该是usingnamespacestd;有人可以向我解释为什么我所做的工作有效,以及它与声明使用特定命名空间的正确方法有何不同? 最佳答案 第一个版本有效,因为编译器认为它是usingnamespace::std;//Noticespace^这只是告诉编译器在全局范围内寻找命名空间std。左侧没有任何内容的范围运算符::与全局范围相同。 关于C++使用命名空间声明,我们在StackOverflow上找

c++ - 使用命名空间不适用于定义?

我无法理解C++命名空间。考虑以下示例://distr.hnamespacebogus{externconstintx;externconstinty;doublemade_up_distr(unsignedparam);}现在,如果我像下面的cpp那样定义我的变量,一切都可以正常编译//distr.cpp#include"distr.h"#includeconstintbogus::x=10;constintbogus::y=100;doublebogus::made_up_distr(unsignedparam){autopdf=(exp(param)/bogus::x)+bogu

c++ - 添加新继承的 "interface"和虚拟方法需要重新编译

现有的答案涵盖了一般情况,但它们有些模糊,我需要确定这一点。考虑:派生自抽象基类“接口(interface)”的现有定义类。类是库的一部分,被编译成多个dll,这些dll通过接口(interface)相互通信。然后添加:第二个“接口(interface)”,定义的类现在将从中派生(因此现在它有两个接口(interface))。由新接口(interface)访问的已定义类的新虚拟方法。我是否需要重新编译链接该库的每个dll,还是只需要重新编译使用新方法的dll?编辑:我的原始接口(interface)公开了一个动态方法,它是Dynamic(intOP,void*args)是否可以添加一个

c++ - 关于 C++ 全局命名空间的困惑

根据我的理解,将::附加到命名空间的前面是指全局命名空间,而不管任何using语句或父命名空间。如果是这样,而且我没有误解任何东西,那么为什么这样的代码可以编译(至少在VisualStudio中):namespaceFoo{namespaceBar{classX;}}usingnamespaceFoo;intmain(void){::Bar::Xx;} 最佳答案 usingnamespaceFoo;将namespaceFoo的所有内容放入当前命名空间的上下文中。由于namespaceBar是namespaceFoo的内容之一,并且u

c++ - 为什么要使用虚拟基类?

根据我的阅读,当你有一个保存数据的抽象基类时使用虚拟基类,所以类不会被复制,但是,如果你不使用虚拟类,复制类有什么问题?是否应该避免保存数据的抽象基类?下面是一个例子:classStorable{public:Storable(conststring&s);virtualvoidread()=0;virtualvoidwrite()=0;virtual~Storable();protected:stringfile_name;//storeinfilenamedsStorable(constStorable&)=delete;Storable&operator=(constStorab