草庐IT

具有不同成员的 C++ 结构 - 在运行时决定

我有以下情况。下面附上伪代码。我有一个A类,它有一个D或E类型的对象c,这会有所不同(实际上是随机决定的)。它使用b作为与远程计算机通信的消息。那么,我应该如何让结构B具有不同的变量(在本例中为float或double)?另外,当我打开一个套接字并传输一个对象时,该对象现在将具有不同的大小。远程计算机不知道对象的大小是否对应于sizeof(int)+sizeof(float)或sizeof(int)+sizeof(double)。我需要将大小作为参数来接收数据包,那么我该如何解决呢?代码:classC{...};classD:publicC{...};classE:publicC{..

C++ CRTP 类层次结构

来自Wikipedia://TheCuriouslyRecurringTemplatePattern(CRTP)templatestructbase{//...};structderived:base{//...};现在如果我想要derived_from_derived,我可以写://TheCuriouslyRecurringTemplatePattern(CRTP)templatestructbase{//...};templatestructderived:base{//...};structderived_from_derived:derived{//...};现在假设我只想要一

c++ - 通过++ 和 -- 运算符更改 C++ 中结构的地址

是否可以使用--或++运算符更改我当前结构的地址,即:mystruct*test=existing_mystruct;test++//insteadofusing:test=test->next_p;我试图使用它,但它似乎是const并给了我一个错误:分配给这个(不合时宜):structmystruct{mystruct*next_p;mystruct*prev_p;voidoperatorplusplus(){this=next_p;}voidoperatorminusminus(){this=prev_p;}}; 最佳答案 对象

异常情况下的 C++ 错误 C2228( '.val' 左侧必须有类/结构/union )

在C++中,我正在尝试实现自己的any使用C++的类。然而,在我能够对其进行测试之前(如果我的实现不好,请随时纠正我),我得到了错误:errorC2228:leftof'.val'musthaveclass/struct/union使用value()两次功能两次,当它在其他地方工作时,这看起来很奇怪。我唯一能想到的就是decltype函数前面导致错误,但它不应该:编辑:我更新了为templateany(TV){...}更改变量的方式构造函数classany{protected:templatestructvariable{public:Tval;variable(){}variable

c++ - 在 C++ 中嵌套在模板中的类中使用基类的成员时出错

考虑以下示例:templatestructA{structB{intb;};structC:B{voidf(){b=0;}};};用GCC4.8.1编译它会出现以下错误:test.cc:Inmemberfunction‘voidA::C::f()’:test.cc:9:11:error:‘b’wasnotdeclaredinthisscopeb=0;^但是,b是父类B的成员(我在示例中使用了struct来公开所有内容)并且如果我使A非模板一切编译。为什么编译器会报错,我该如何避免? 最佳答案 这在语言中是一种晦涩的极端情况,但解决方

c++ - 用位域打包 bools (C++)

我正在尝试使用C++与Ada代码进行交互,因此我正在使用位字段定义一个结构,以便所有数据在两种语言中都位于同一位置。以下内容不完全是我在做什么,但概述了问题。以下也是VS2008中的控制台应用程序,但这不是特别相关。usingnamespaceSystem;intmain(){intarray1[2]={0,0};int*array2=newint[2]();array2[0]=0;array2[1]=0;#pragmapack(1)structtestStruct{//Word0(desired)unsigneda:8;unsignedb:1;boolc:1;unsignedd:21

c++ - 使用 shared_ptr<void> 初始化结构

我一直遇到一个错误nomatchingconstructorforinitializationof'std::shared_ptr'这是有道理的,但我不知道从哪里开始。这是我正在使用的。#includestructContainer{inttype;std::shared_ptrpayload;Container(intt,constvoid*p):type(t),payload(p){}};intmain(){return0;}我正在尝试使用shared_ptr制作一个通用容器类型为void.我打算对类型进行切换,然后将有效负载转换为适当的类型。我想我可以做类似Containerct

c++ - 结构包装。有没有自动的方法来做到这一点?

问题:是否有自动进行结构打包的方法?背景:Structurepacking对于降低某些基本数据的内存成本非常有用。基本上,这是通过重新排序内部数据来实现最小内存成本的技巧。我的问题是有没有一种自动方法可以做到这一点?比如我这里有一个structFoo(假设32bit)structFoo{charflag;char*p;shortnumber;};经过自动检查(是否为脚本,是否为native),我应该得到Foo的内存优化版本,即:structFoo{char*p;shortnumber;charflag;};这只是一个玩具示例。考虑下面更困难的情况,手动重新排序将是一项相当大的工作。结构

c++ - CUDA cudaMemcpy 数组结构

我想在我的项目中清理CUDA内核的参数。现在,内核需要3个uint32_t数组,这导致代码非常难看:(id表示全局线程ID,valX是某个任意值)__global__voidsome_kernel(uint32_t*arr1,uint32_t*arr2,uint32_t*arr3){arr1[id]=val1;arr2[id]=val2;arr3[id]=val3;}我想用一个结构包围所有这些数组:typedefstructS{uint_32_tarr1,uint_32_tarr2,uint_32_tarr3,uint32_tsize}S;其中size表示结构中每个arrX的长度。我想

c++ - C++ 中的多重声明

在[basic.scope.declarative]p4中,阅读Givenasetofdeclarationsinasingledeclarativeregion,eachofwhichspecifiesthesameunqualifiedname,—(4.1)theyshallallrefertothesameentity…天真的阅读可能意味着以下代码可能是有效的,因为“两个声明都引用同一个实体”:intx;intx;然后人们可能会记得一个定义规则[basic.def.odr]p1。上述推理可能仅适用于声明而不适用于定义。[basic.def]p2中详细说明了区别。例如下面的代码肯定