草庐IT

多重性

全部标签

c++ - 多重继承模板类

classmessageA{};classmessageB{};templateclassqueue{public:virtual~queue(){}voidsubmit(T&x){}};classA:publicqueue,publicqueue{};intmain(){Aaa;aa.submit(messageA());aa.submit(messageB());}我的第一个想法是,上面的代码应该没问题,因为类A将包含2个重载的提交函数,它们将接受messageA和messageB对象。但是,编译器给我以下错误:请问为什么会有歧义?不是很明显,对于第一次提交调用,我想调用messa

c++ - 虚函数和多重继承情况下的对象布局

我最近在接受采访时被问及有关具有虚函数和多重继承的对象布局。我在上下文中解释了它是如何在不涉及多重继承的情况下实现的(即编译器如何生成虚拟表,在每个对象中插入一个指向虚拟表的secret指针等等)。在我看来,我的解释似乎缺少了一些东西。所以这里有问题(见下面的例子)C类对象的确切内存布局是什么。C类的虚拟表条目。A、B和C类对象的大小(由sizeof返回)。(8、8、16??)如果使用虚继承呢?大小和虚拟表条目肯定会受到影响吗?示例代码:classA{public:virtualintfunA();private:inta;};classB{public:virtualintfunB(

c++ - 使用多重继承时,为什么这个限定名有歧义?

我正在尝试使用Bottom对象访问结构Top中的成员变量x。代码如下:#includestructTop{public:intx=1;};structLeft:publicTop{intx=2;};structRight:publicTop{intx=3;};structBottom:publicLeft,publicRight{intx=4;};intmain(){Bottomb;std::printf("value:%d\n",b.Left::Top::x);return0;}使用gcc4.8会出现以下错误:main.cpp:Infunction'intmain()':main.c

C++17:泛型(基于多重继承?)检查参数包中的模板

我需要一些代码来检查某个模板是否是参数包的一部分。为了实现对普通类的检查,我使用了概述的基于多重继承的方法,例如通过LouisDionnehere或AgustínBergéhere.类测试想法是包装每个类T在PackEntry的包装中类,然后有PackIndex继承自所有PackEntry类。这样,如果您正在寻找类(class)A,您需要做的就是检查是否有PackIndex可以转换为正确的PackEntry.把所有东西放在一起,它看起来像这样:#include#includetemplatestructPackEntry{usingtype=T;};templatestructPack

c++ - 轻松地将许多重要的 "static library projects"重构为 "dll projects"

我有6个静态库项目:--Math-ECS:dependsonMath-Utility:dependsonECS-Physics:dependsonUtility-Graphics:dependsonUtility-BaseGame:dependsonPhysicsandGraphics-Somegame(.exe):dependsonBaseGame(The"depends"hereistransitivee.g.BaseGamealsodependsonECS.)我通过“静态库”技术成功地使用了6个项目。今天听说动态库可以减少编译时间(暂且不讨论是否属实),所以我阅读了以下链接并成功

c++ - 如何在 C++ 中使用 override 关键字进行多重泛型继承?

我有一个通用的IDetachable接口(interface),它提供了一个方法:templateclassIDetachable{public:virtualTdetached()const=0;};我有这些示例类:classA:publicIDetachable{virtualAdetached()constoverride{//someimplementationwhichreturnsadetachedAobject}};继承B时出现的问题:classB:publicA,publicIDetachable{virtualBdetached()constoverride{//so

c++ - 使用具有多重继承的 Qt 信号和槽

我有一个类(MyClass),它从Qt内置对象(QGraphicsTextItem)继承了大部分功能。QGraphicsTextItem间接继承自QObject。MyClass还实现了一个接口(interface),MyInterface。classMyClass:publicQGraphicsTextItem,publicMyInterface我需要能够在MyInterface*上使用connect和disconnect。但是connect和disconnect似乎只适用于QObject*实例。由于Qt不支持从QObject派生类的多重继承,我无法从QObject派生MyInterf

c++ - C++ 中的双重分派(dispatch)/多重方法

我有一个关于C++双重分派(dispatch)的问题。在下面的代码中,我希望第二组的结果与第一组的结果相匹配。我不知道实际类型(除非我尝试dynamic_cast)但我知道该对象继承自BaseClass类型。实现此目标的最有效(性能方面)方法是什么?在谷歌搜索了一段时间后,我发现了双重分派(dispatch)和loki多重方法。我在Shape示例中遇到的问题是,在我的应用程序中,Processor和BaseClass是完全独立的,并且没有它们可以相互调用的通用方法。其次,只有一个处理器(即没有任何东西继承自它)。感谢您的帮助。#include#includeusingnamespace

c++ - 多重继承使私有(private)成员可访问

classA{public:inta;};classB:privateA{};classC:publicA{};classD:publicB,publicC{D(){B::a=0;}};即使B私下继承了A,也可以编译。如果我删除D对C的继承,编译器会说a不可访问,正如我所期望的那样。那么C的继承是否混淆了我的编译器?编译器是gcc4.4.7 最佳答案 看起来像一个真正的编译器错误,因为标准不允许这样的访问11.2Accessibilityofbaseclassesandbaseclassmembers在标准本身之外寻找证据,Whoz

c++ - 多重继承不明确的基类

考虑代码structBase{};structDerived:publicBase{};structA:publicBase{};structB:publicA,publicBase{};structC:publicA,publicDerived{};//whynoambiguityhere?intmain(){}编译器(g++5.1)警告warning:directbase'Base'inaccessiblein'B'duetoambiguitystructB:publicA,publicBase{};我明白了,Base在B中重复了。为什么C没有警告?C不是同时继承自A和Derive