草庐IT

msf会话派生cs

全部标签

c++ - 当我从虚拟基派生 D 时,为什么 VS2015 中的 sizeof(D) 增加了 8 个字节?

我正在使用C++14§3.11/2中的示例:structB{longdoubled;};structD:virtualB{charc;}在clang、g++和VS2015中运行下面的代码片段之后#includestructB{longdoubled;};structD:/*virtual*/B{charc;};intmain(){std::cout我得到了以下结果:clangg++VS2015sizeof(longdouble)16168alignof(longdouble)16168sizeof(B)16168alignof(B)16168sizeof(D)323216alignof

c++ - 派生对象的 boost 序列化不调用派生的序列化()

我已经阅读了大量类似的问题,但没有找到答案。我正在使用VisualStudio2010和boost1.47。这是完整的可编译代码:#include"stdafx.h"#include#include#include#include#includeusingnamespacestd;classBaseObject{public:BaseObject(void){};virtual~BaseObject(void){};templatevoidserialize(Archive&ar,constunsignedintversion){/*nothinghappenshere*/};};cl

c++ - 如何将具有派生参数的函数转换为具有基本参数的函数?

我有一个名为Reciever的类,它有一个名为recieve(constEvent*)的函数,其中Event继承自BaseEvent。我想创建一个绑定(bind)到该类的特定实例。该实例称为rec。为此,我使用:void(Reciever::*func)(constEvent*)=&Reciever::recieve;autorecievePtr=std::bind(func,&rec,std::placeholders::_1);但是,当我尝试将其存储在一个vector中时,我必须指定一个std::function将BaseEvent作为输入,而不是事件,像这样:std::vecto

c++ - 使用派生自 `std::get` 的元素在 `std::tuple` 上调用 `std::tuple` - 格式错误?

structY{};structX:std::tuple{};intmain(){std::get(std::make_tuple(X{}));}onwandbox当使用libc++时,上面的代码可以通过clang++编译并按预期工作。当使用libstdc++时,上述代码无法同时使用clang++和g++进行编译,并出现以下错误:include/c++/7.0.1/tuple:1302:36:error:nomatchingfunctionforcallto‘__get_helper(std::tuple&)’{returnstd::__get_helper(__t);}~~~~~~~

c++ - 通过指向派生类函数的指针调用基虚方法

我需要通过指针从派生类调用基方法A::foo()。#includestructA{virtualvoidfoo(){std::cout*f)();}};intmain(){B*p=newB();p->callBase(&A::foo);}这段代码输出“B::foo”。是否可以通过指向方法的指针调用A::foo()? 最佳答案 好吧,您可以使用一些技巧来覆盖this的值来做类似的事情。不过,您可能永远不应该尝试这样做,vtable指针并不意味着可以手动修改。要执行您描述的操作,我们需要有指向A的vtable的指针。我们的对象p只有指向

c++ - 基类和派生类的复制构造函数

我有这两个类///////////BASECLASSclassBase{public:Base(int=0);~Base();Base(Base&);Base(Derived&);////我读到如果我的派生类没有复制c'tor将调用基的复制c'tor但每次我收到从Base到非标量的转换typeDerivedrequested谁错了?我的编译器或我的书,还是我误解了?提前致谢 最佳答案 只是一个提示。下面的代码是否给出同样的错误?classbase{};classderived:publicbase{};intmain(){deriv

c++ - 在派生类中重写运算符 new/delete

我有一个无状态的抽象基类,各种具体类都从中继承。其中一些派生类也是无状态的。因为它们中的许多是在运行期间创建的,所以我想通过覆盖运算符new()/delete()让所有无状态派生类模拟单例来节省内存和开销。一个简化的例子看起来像这样:#includestructBase{virtual~Base(){}protected:Base(){}//preventconcreteBaseobjects};structD1:publicBase{//statefulobject--defaultbehaviorintdummy;};structD2:publicBase{//statelesso

c++ - 派生类中的显式模板静态成员实例化

我正在尝试使用静态成员实现模板类。从模板类派生的类应该被实例化,而不需要编写额外的代码。这是我天真的(但不成功)的方法:Singleton.h:templateclassSingleton{protected:Singleton();staticTinstance_;}//explicitinstantiationof'instance_'???,//where'instance_'isaninstanceofthederivedclasstemplateTSingleton::instance_;混凝土A.h:classConcreteA:publicSingleton{public

c++ - 在虚函数中访问派生类成员变量

classCar{classBaseState{explicitBaseState(Car*vehicle):mVehicle(vehicle){}virtualvoidrun()=0;Car*mVehicle;}classState1:publicBaseState{explicitState1(Car*vehicle):BaseState(vehicle){}virtualvoidrun(){//usedataofCar...doSomething();}virtualvoiddoSomething(){}}classState2:publicBaseState{}...}clas

c++ - 派生类中vtable的理解

我试图通过虚拟表和继承来理解一些低级的东西。当您通过继承两个类并添加新的虚函数来创建新类时,vptr将存储在哪里?在我看来,编译器在那种情况下会执行一些“vptr优化”。我正在努力弄清楚。假设,我们有以下结构:structA{inta;virtualvoidfa();};structB{doubleb;virtualvoidfb();};structC:A,B{charc;virtualvoidfa();virtualvoidfb();virtualvoidfc();};在x86和align=4的情况下,内存中的A和B将如下所示:+------+------+A:|vptr|a|+--