草庐IT

c++ - 有条件地继承自纯基类

假设我有以下类定义structbase{virtualintf()=0;};structA:publicbase{intf()final{return1;}};structB:publicbase{intf()final{return2;}};是否可以将A和B转换为带有bool参数的模板,该参数指定是否从base继承还是不?我有需要或不需要提供通用接口(interface)的基类的用例。假设A和B有很多成员函数,那么重复实现会很乏味。但是sizeof(A)和sizeof(B)很小。 最佳答案 当然:templatestructA{/

c++ - struct S { int align; 之间的区别}; (在 struct 关键字之后命名)和 struct { int align; } S; (结构定义后的名称)

#includestructHeader{unsignedlonglongintalignment;};intmain(void){structHeaderheader;//note:wecanloosethe'struct'inC++structHeader*pheader=&header;return0;}上面的程序在C和C++中都能完美编译。但是当我将Header结构更改为:struct{unsignedlonglongintalignment;}Header;它失败并在C中显示以下消息:错误:“Header”的存储大小未知在C++中:error:aggregate‘main()

c++ - 在 std::map 中存储结构实例

我正在尝试将一些结构映射到其他一些实例,如下所示:templateclassComponent{public:typedefstd::mapinstances_map;instances_mapinstances;Component(){};Tadd(EntityIDid){T*t=newT();instances[id]=*t;return*t;};};然后我这样使用它:structUnitInfos{intowner_id;inthealth;floatx,y;};classLogicComponent:publicComponent{};问题是当它稍后检索数据时,像这样:comp

c++使用结构中的指针保存和加载游戏

我知道我可以使用:MyGamegame;//thegameobject//ofstreamout("mygame.bin",ios::binary);out.write((char*)&game,sizeof(MyGame));保存和加载游戏,但是如果我在MyGame结构中有指针怎么办?指针会被保存而不是它指向的数据吗?以及:如何解决这个问题? 最佳答案 您不能只将指针写入流并期望它神奇地完成。您需要在对象中实现保存/加载方法。例如:classSerializable{virtualvoidsave(std::ofstream&_o

C++ 将内部结构作为参数传递

有一个包含内部结构TIn的结构TOut:templatestructTOut{structTIn{boolb;};TInin;Tt;};如何正确地将TIn作为形式参数传入某些方法?classTest{public:templatestaticvoidtest(constTOut::TIn&i){}//Error};intmain(){TOuto;Test::test(o.in);}程序编译出现如下错误:Error4errorC2998:'inttest':cannotbeatemplatedefinition 最佳答案 您需要使用t

c++ - 将结构转换为 char* 并返回

我正在尝试将我的结构转换为char*,然后再转换回结构。但我想我错过了一些东西。一旦返回到结构体,结构体只有一个属性是正确的。其余的都是错误的。这是我的代码。#includeusingnamespacestd;structINFO{unsignedchara;intb;intc;charg[121];}inf;intmain(){charframe[128];INFOtest1=INFO();test1.a='y';test1.b=4000;test1.c=9000;strcpy(test1.g,"GoodbyeWorld");sprintf(frame,(char*)&test1);

c++ - 如何创建一个 std::set 结构?

我需要创建一个STL::set结构。因此,我写了以下内容:stl::setmySet;//Point-nameofthestructure.然后我尝试将结构实例添加到mySet,如下所示:PointmyPoint;mySet.insert(myPoint);但是,我遇到了几个编译错误(错误C2784、错误C2676):1>C:\ProgramFiles(x86)\MicrosoftVisualStudio10.0\VC\include\xfunctional(125):errorC2784:boolstd::operator&,conststd::vector&):failedtobr

c++ - POD 结构(相同类型的成员): are members in contiguous memory locations?

给定templatestructVector3d{Tx,y,z;};假设x、y和z位于连续的内存位置是否安全?对于T=float和T=double至少可以安全地假设吗?如果不能,是否有可能以跨平台的方式实现?注意:只要x、y、z是连续的,我不介意在z之后填充 最佳答案 Isitsafetoassumethatx,y,andzareincontiguousmemorylocations?从技术上讲,语言没有这样的保证。另一方面,它们也没有必要不连续,实际上它们很可能是连续的。Ifnotisitpossibletoenforceinac

c++ - 当编译时已知引用占用非聚合结构中的空间时,是否错过了优化?

注意:这是一个后续问题:Isitamissedoptimization,whenacompile-timeknownreferencetakesspaceinastruct?,这表明聚合初始化可以将b的默认初始化替换为对a的引用,方法是使它成为对某个其他变量的引用。这个问题是关于当聚合初始化不可能时会发生什么。看这个例子:structFoo{inta;int&b;Foo():b(a){}};如果sizeof(Foo)!=sizeof(int)是否错过了优化?我的意思是,编译器能否从结构中删除b,因为它总是引用a?有什么可以阻止编译器进行这种转换吗?(注意,structFoo看起来就是这

c++ - 使用 g++ 编译 C++ 时出现 'hides constructor for' 警告是什么意思?

使用以下代码:#includestructmy_struct{inta;intb;my_struct();};my_struct::my_struct(void){printf("constructor\n");}voidmy_struct(void){printf("standardfunction\n");}intmain(intargc,char*argv[]){structmy_structs;s.a=1;s.b=2;printf("%d-%d\n",s.a,s.b);return0;}我在使用g++-Wshadowmain.cpp编译时收到警告:main.cpp:15:20: