草庐IT

继承权

全部标签

c++ - 为什么 gcc 警告使用 std::tuple 和虚拟继承调用非平凡的移动赋值运算符?

在下面的例子中,gcc7给出了警告:defaultedmoveassignmentfor'B'callsanon-trivialmoveassignmentoperatorforvirtualbase'A'[-Wvirtual-move-assign]如果我创建一个std::tuple目的。Clang5没有报告任何问题。如果vector,问题也会消失从Base中删除.Example.#include#includeclassBase{public:virtual~Base();std::vectorv;};classA:publicBase{};classB:publicvirtual

c++ - 删除 C++ 继承中虚拟类成员的代码重复

我现在陷入了一个奇怪的问题。我将编写一个真正简化的版本。classBase{public:virtualintfunc1()=0;virtualintfunc2()=0;protected:intn;};classder1:publicBase{//implementsthevirtualfunctionsofthebaseandusestheprotecteddata//membersofthebase.};classder2:publicBase{//implementsthevirtualfunctionsofthebaseandusestheprotecteddata//mem

c++ - c++ 元编程中的 typedef 与公共(public)继承

免责声明:问题与Inheritanceinsteadoftypedef完全不同到目前为止我找不到任何类似的问题我喜欢玩C++模板元编程(主要是在家里,我有时会在工作中轻率地介绍它,但我不想让程序只对那些不费心去学习它的人可读),但是我一直每当出现问题时,编译器错误就会完全消除。问题是当然c++模板元编程是基于模板的,因此,无论何时您在深度嵌套的模板结构中遇到编译器错误,您都必须在10行错误消息中挖掘自己的方法。我什至习惯于在文本编辑器中复制/粘贴消息,然后缩进消息以获得一些结构,直到我了解实际发生的事情,这增加了一些跟踪错误本身的工作。据我所知,问题主要是由于编译器及其输出typede

c++ - 虚拟继承和静态继承——C++中的混合

如果你有这样的事情:#includetemplateclassA{public:voidfunc(){T::func();}};classB:publicA{public:virtualvoidfunc(){std::coutfunc()是动态调度的吗?您如何实现类A,以便在B具有虚拟重写时动态分派(dispatch)它,但如果B没有,则静态分派(dispatch)?编辑:我的代码没有编译?对不起大家。我现在有点不舒服。我的新代码也无法编译,但这是问题的一部分。另外,这个问题是给我的,不是常见问题解答。#includetemplateclassA{public:voidfunc(){T

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

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

c++ - 通过继承减少模板膨胀

有没有人有通过继承减少模板代码膨胀的经验?我对以这种方式重写我们的容器犹豫不决:classvectorBase{public:intsize();voidclear();intm_size;void*m_rawData;//....};templateclassvector:publicvectorBase{voidpush_back(constT&);//...};我应该在减少编译时间的同时保持最佳性能。我也想知道为什么标准库实现不使用这种方法。 最佳答案 如果您不知道存储的元素是什么类型,那么对vector的操作只有很少的一部分

c++ - 使用继承构造函数时 VS2015 内部编译器错误

这是一个10行的C++11程序,从我正在处理的程序中大大简化了:templateclassBase{public:templateBase(Sx){}};templateclassChild:publicBase{public:usingBase::Base;};templateclassChild:publicBase{public:usingBase::Base;};intmain(){Childchild(8.0f);}MSVC2015输出:1>------Buildstarted:Project:MyProject,Configuration:DebugWin32------1

c++ - 继承构造函数和大括号或等于初始值设定项

我不明白为什么你不能编译一个类,它既有一个成员(不是默认可构造的),也有一个大括号或相等的初始值设定项和一个继承的构造函数。g++说:test.cpp:22:15:error:useofdeletedfunction‘Derived::Derived(float)’Derivedd(1.2f);test.cpp:16:13:note:‘Derived::Derived(float)’isimplicitlydeletedbecausethedefaultdefinitionwouldbeill-formed:usingBase::Base;test.cpp:16:13:error:no

c++ - 当你是 friend 时,为什么 GCC 不允许从私有(private)嵌套类继承?

问同样的问题:为什么GCC允许从私有(private)嵌套类继承?对于非模板类,它允许从私有(private)嵌套类继承,如果它是一个friend,但不是模板类。是错误吗?templateclassInheritFromBaseMember:publicBase::MemberPrivate//error{usingPrivateMember=typenameBase::MemberPrivate;//worksfine};classMyBase{friendclassInheritFromBaseMember;//anothertrytodeclareitfriendtemplate

c++ - 使用指令、重载的私有(private)继承?

我在一个项目中使用私有(private)继承,在“根据”意义上实现。基类定义了operator[],这是我想要使用的功能。因此,我有classA:privateB{usingB::operator[];//...};但是,如何控制我得到的operator[]版本?事实上,我需要不止一个,包括const和非const版本。这能实现吗? 最佳答案 我的理解是您的using应该自动引入运算符的所有不同重载。您是否希望将某些重载排除在子类之外?在这种情况下,最好将工作拆分为父级中几个不同名称的函数,并且只使用您需要的函数。