草庐IT

继承权

全部标签

c++ - C++ FakeIt 库多重继承

我正在比较GoogleMock与FakeIt编写单元测试的情况。与GoogleMock相比,我更喜欢FakeIt,因为我有Java背景,而且FakeIt与Mockito/JMock语法非常接近,这使得使用该库更容易编写和维护。但是FakeItGIThome(https://github.com/eranpeer/FakeIt)说它不支持MultipleInheritance并且应用程序imtesting具有多重继承的代码。我不必支持菱形继承,所以我想知道是只是多重继承的那个方面不受支持,还是还有其他方面也不受支持? 最佳答案 不幸的

c++ - 使用 "irrelevant"方法的继承类设计

假设我有以下抽象基类:classDLAContainer{public:DLAContainer(){std::random_devicerd;mt_eng=std::mt19937(rd());}virtualvoidgenerate(std::size_t_n)=0;protected:std::mt19937mt_eng;virtualvoidspawn_particle(int&_x,int&_y,std::uniform_real_distribution&_dist)=0;virtualvoidspawn_particle(int&_x,int&_y,int&_z,std:

c++ - 使用模板和构造函数从两个派生类进行多重继承

我正在按照here中的示例进行操作,但是我正在使用模板并调用其中一个派生类的构造函数。下面的代码在没有模板的情况下工作,但当包含时我不确定为什么会出现以下错误::error:nomatchingfunctionforcallto‘AbsInit::AbsInit()’NotAbsTotal(intx):AbsInit(x){};^代码如下:#includeusingnamespacestd;templateclassAbsBase{virtualvoidinit()=0;virtualvoidwork()=0;};templateclassAbsInit:publicvirtualAb

c++ - 继承函数返回派生类,而不是基类

在C++中是否可以在Base类中制定返回Base类型的函数,以便在Derived类中,它们返回Derived类型,而不重载?最小的例子:classBase{public:Base(doublev){value=v;}Baseadd(Baseb){returnBase(b.value+this->value);}voidprint(){std::cout动机在实际例子中,Base代表一个线性代数矩阵,Derived代表一个vector。矩阵提供了许多适用于vector的函数,例如标量的加法或乘法。在这种情况下,最好不必手动覆盖所有这些矩阵函数来返回vector。如果可能的话,我想表达无论

c++ - 通过 CRTP 检测模板类继承的元函数

我有一个这样的界面:templateclassInterface{...}及其具体实现:templateclassConcrete:publicInterface,T>{...usingtype=typenameT;}我想要一个元函数来检查某个类型是否来自Interface。举个例子,假设接口(interface)只有一个模板参数(因此它不会生成子模板类):templateclassA{...}classB:publicA{...}在这种情况下,我可以使用:templatestructis_A{staticboolconstvalue=std::is_base,T>::value;}我

c++ - 常量和非常量版本和继承

在我的问题中,我将有几个共享getter和setter的类(在我的例子中,operator())。假设我有以下内容classBase{public:int&operator()(){returnvalue;}intoperator()()const{returnvalue;}protected:intvalue;};classDerived:publicBase{public:intoperator()()const{returnvalue;}};我希望能够做这样的事情:Derivedd;d()=1;但是编译器提示说表达式不可赋值。然而,这样做Derivedd;d.Base::oper

c++ - 以不止一种方式向上转换为作为基类的 C++ 类(无需使用虚拟继承)

classA{};classB:publicA{};classC:publicA,publicB{};intmain(){Cc;A*pA=static_cast(&c);}在上面的代码中,类C是从类A派生而来的,有两种不同的路径:1.直接来自A2.间接通过B即A因此,当我将类C的对象转换为指向类A的指针时,Linux上的g++会报告以下错误:错误:A是C的不明确基数我也通过删除静态转换来尝试相同的代码,如下所示:A*pA=&c;但是,我仍然得到完全相同的错误。有什么解决办法吗?顺便说一句,在使用VisualC++编译器的Windows上同样可以正常工作而不会出错。我知道虚拟继承可以解决

c++ - 我可以将 BOOST_FUSION_ADAPT_STRUCT 与继承的东西一起使用吗?

假设我有structcat{inttail;inthead;};structbird{intwing;intbursa;};如果我这样做...structwat:publiccat,publicbird{};BOOST_FUSION_ADAPT_STRUCT(cat,tail,head)BOOST_FUSION_ADAPT_STRUCT(bird,wing,bursa)BOOST_FUSION_ADAPT_STRUCT(wat,wat::cat,wat::bird)...我无法获得构建,但如果我像下面这样显式引用继承的对象,它是完全有效的。#include#includenamespa

c++ - 没有虚拟继承的奇怪行为

这个问题在这里已经有了答案:multipleinheritance:unexpectedresultaftercastfromvoid*to2ndbaseclass(3个答案)关闭5年前。我正在处理一段表现出非常奇怪行为的代码。我设法在一个简单的helloworld风格的程序中复制了它,代码如下:#includeusingnamespacestd;classTest{public:virtual~Test()=default;protected:virtualvoidSetUp(){}};classICallbackReceiver{public:virtual~ICallbackRe

c++ - 从 stdexcept 类继承时为 "Undefined Symbols"

这是在中定义的异常:classlength_error:publiclogic_error{public:explicitlength_error(conststring&__arg);};这是我的异常(exception)情况:#include#includeusingnamespacestd;classrpn_expression_error:publiclogic_error{public:explicitrpn_expression_error(conststring&__arg);};为什么在时会出现此错误?不是吗?Undefinedsymbols:rpn_expressio