草庐IT

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中详细说明了区别。例如下面的代码肯定

C++ 指定结构的实际大小

我遇到了C#和C++之间的互操作问题,我通过在native代码和托管代码中定义的结构在我的应用程序的两个“端”之间共享内存。native端的结构定义如下:#pragmapack(push,1)structRayTestCollisionDesc{btVector3hitPosition;btRigidBody*hitBody;RayTestCollisionDesc(btRigidBody*body,btVector3&position):hitBody(body),hitPosition(position){}};#pragmapack(pop)并且在托管(C#)端定义了一个类似的结

c# - 如何将带有 unsigned char* 的结构从 C# 传递到 C++?

我有一些带有结构描述和一些方法的C++dll:structMSG_STRUCT{unsignedlongdataSize;unsignedchar*data;}和功能例如:unsignedlongReadMsg(unsignedlongmsgId,MSG_STRUCT*readMsg){readMsg->dataSize=someDataSize;readMsg->data=someData;}所以我想从C#调用这个函数:[StructLayout(LayoutKind.Sequential)]structMSG_STRUCT{UInt32dataSize;byte[]data;}[D

c++ - 增强融合 : convert adapted struct type to text

给定一个这样的结构:structFoo{intx;inty;doublez;};BOOST_FUSION_ADAPT_STRUCT(Foo,x,y,z);我想生成这样的字符串:"{intx;inty;doublez;}"我已经看到如何printthevaluesFusion改编的结构,但在这里我只需要打印类型和名称。我怎样才能最简单地做到这一点?如果有更好的方法,我不会嫁给Boost.Fusion。 最佳答案 我认为您可以通过对thisanswer中的代码稍作修改来获得与您想要的类似的东西。.您可以使用boost::fusion::

c++ 紧密耦合的模板定义,无限重复的模板参数

考虑以下简单且常见的情况:structA;structB;structA{B&b;A(B&b_):b{b_}{}};structB{Aa;B():a{*this}{}};intmain(){Bb;return0;}此编码模式用于通过组合将一个类与另一个类紧密耦合。现在,假设我想通过模板来完成此操作。请考虑以下事项:templatestructA;templatestructB;templatestructA{Bparam&b;A(Bparam&b_):b{b_}{}};templatestructB{Aparama;B():a{*this}{}};intmain(){B>b;//inf

c++ - 有没有办法证明下面的第二个片段在函数声明之前插入了一个不可见的声明 `struct S;`?

下面的代码编译(demo),证明函数声明voidf(structS&);插入了一个不可见的声明(structS;)在全局作用域,就在函数声明之前,否则第二个声明(externSs;)将无法编译。voidf(structS&);externSs;我很确定下面的第二个代码还在函数声明之前包含一个不可见的声明(structS;),但我找不到证明这一点的方法。有什么建议吗?structS{};voidf(structS&);上面提到的不可见声明在[basic.scope.declarative]/4中的注释中提到。 最佳答案 I'mpret

c# - 从 C# 访问 Win32 C/C++ 结构成员

我正在使用某种Hook拦截本地dll或exe从C#执行的Win32API调用。在这种特殊情况下,我对user32.dll中的DrawText()感兴趣。它在Win32API中是这样声明的:INTWINAPIDrawTextW(HDChdc,LPCWSTRstr,INTcount,LPRECTrect,UINTflags)LPRECT结构具有以下签名(也在Win32API中):typedefstructtagRECT{LONGleft;LONGtop;LONGright;LONGbottom;}RECTLPRECT;LONG是32位系统上32位整数的typedef(不知道64位系统,此时