草庐IT

msf会话派生cs

全部标签

c++ - gcc/clang 在基本结构的后填充中布置派生结构的字段

这个问题在这里已经有了答案:Standard-layoutandtailpadding(5个答案)关闭4年前。当涉及填充和继承时,我对gcc和clang如何布局结构感到困惑。这是一个示例程序:#include#includestructA{void*m_a;};structB:A{void*m_b1;charm_b2;};structB2{void*m_a;void*m_b1;charm_b2;};structC:B{shortm_c;};structC2:B2{shortm_c;};intmain(){Cc;memset(&c,0,sizeof(C));memset((B*)&c,-

c++ - 当大小相同时使用派生对象数组作为基础对象数组 (CComVariant/VARIANT)

我使用的代码将派生对象数组视为基础对象数组。两个对象的大小相同。我想知道:这在实践中是否安全,请记住代码只会在Microsoft编译器上编译?这是我的例子:BOOST_STATIC_ASSERT(sizeof(VARIANT)==sizeof(CComVariant));//auto_arraydeletes[]thepointerifdetach()isn'tcalledattheendofscopeauto_arraybuffer(newCComVariant[bufferSize]);//...Codethatsetsthevalueofeachelement...//Thist

c++ - 在多态性增加派生类大小的多重继承的情况下,在派生类中为析构函数编写代码。为什么?

#includestructBase1{public:virtualvoidshow()=0;};structBase2{public:virtualvoidDisplay()=0;};classDerived:virtualpublicBase1,virtualpublicBase2{public:virtualvoidshow(){}virtualvoidDisplay(){}};voidmain(){usingnamespacestd;cout输出显示12但是当我插入Dervied类的析构函数时,即以下代码#includestructBase1{public:virtualvoi

c++ - 当派生定义了析构函数时,使用复制构造函数而不是移动构造函数

当我向派生类添加析构函数时,当它尝试使用复制构造函数而不是定义的移动构造函数时,我会遇到编译器错误(使用gcc4.7):#include#includetemplatestructBase{Tvalue;Base(T&&value):value(value){std::coutstructDerived:publicBase{Derived(T&&value):Base(std::forward(value)){std::coutDerivedMakeDerived(T&&value){returnDerived(std::forward(value));}structDummy{};

c++ - 如何调用在基类中实现纯虚方法的派生类中的模板化方法?

我有一个带有几个纯虚方法的基类,例如classGenericFunction{public:GenericFunction(){/*Initgenericfunctionstate*/};virtualvoidIterate(short*ps,unsignedcs)=0;virtualvoidIterate(float*ps,unsignedcs)=0;}然后我有一堆实现特定功能的派生类,我想在这些函数的集合上调用Iterate()方法,为每个函数提供一个数据样本block。我只知道调用Iterate()时的数据类型。Iterate()方法对于许多函数来说几乎完全相同,所以我想使用模板

c++ - 设计一个将两个抽象基类对象作为参数的函数,并根据对象的派生类做不同的事情

==编辑3==最后,我只是在Shape和checkIntersect(Shape)中添加了一个抽象方法和让他们调用我的免费(非成员)函数,这些函数已经在一个地方实现,同时使用一些预处理器和头文件技巧来为自己保存一些重复代码,以防我需要添加其他子类。为了完成起见,我将标记Jeffrey的回答,因为他的回答最接近我所做的,但是我感谢你们所有人向我展示了一些我实际上不知道的很酷的东西(函数模板)并将我链接到其他2个问题也提出了Visitor/Doubledispatch作为解决方案。虽然我不得不说,但我希望我们能尽快在C++中看到多方法。==编辑结束==所以我有一个基类Shape及其子类:T

c++ - 非多态类型派生类型的虚拟基础

基到派生的转换需要通过static_cast或dynamic_cast进行显式转换。当基数是虚拟时,只有后者适用。此外,dynamic_cast只能用于多态类型。两者一起似乎表明,鉴于所涉及的类型不是多态的,将虚拟基础转换为派生实际上是不可能的。这是真的吗? 最佳答案 您对标准的解释似乎是正确的。但是我愿意争辩说这无关紧要,因为你假设的带有非虚拟析构函数的虚拟基础是一场灾难,当有人试图多态删除它并遇到未定义的行为时,它就会发生,因为析构函数是非-虚拟。 关于c++-非多态类型派生类型的虚

c++ - 派生类依赖函数

我有基类DataProcessor。它是某些坐标系中位置计算器的基类。因此,例如,它可以有如下后代:SphericDataProcessor、CartesianDataProcessor。有基类CookedDataCatalogue,它是一些对象位置容器的基类。所以每个DataProcessor都应该能够将其数据放入每个CookedDataCatalogue。我可以想象这样的事情:classCookedDataCatalogue{virtualvoidTransform(DataProcessor*dp)=0;virtualvoidPutData(???)=0;}classCooked

c++ - 继承包含另一个派生类的 C++ 类

将下一个C++类作为问题的简化:structCar{virtualintget_price()=0;};structExpensiveCar:publicCar{intget_price(){/*..*/}voidapply_turbo(){/*..*/};};structCheapCar:publicCar{intget_price(){/*..*/}};structCarRetailer{virtualstd::vectorget_cars()=0;};structExpensiveCarsRetailer:publicCarRetailer{virtualstd::vectorg

c++ - 如果基类包含数组成员,则派生类的构造函数不能是 constexpr

我想定义派生类型(SBar)的constexpr值,使用构造函数,其唯一参数是基类(SFoo)的变量,它仅用于初始化基类。当基类没有数组成员时,这很好用。但是,当我添加一个数组时,派生值不再是constexpr。不过,基类的简单拷贝确实会产生constexpr结果。为了安全起见,我已明确默认所有复制和移动构造函数。测试.cpp#defineUSE_ARRAYstructSFoo{constexprSFoo()=default;constexprSFoo(SFooconst&)=default;constexprSFoo(SFoo&)=default;constexprSFoo(SFoo