草庐IT

c++ - 需要 Union hack

我有一个表示顶点的结构。它具有x、y和z字段以及其他几个字段。最近我得出结论,对于某些功能,我需要以数组的形式访问顶点的坐标。我不想用临时变量“污染”代码或将所有看起来像v.y的地方更改为这个v.coord[1]这既不好也不优雅的。所以我想到了使用union。这样的事情应该有效:struct{floatx,y,z;}Point;struct{union{floatcoord[3];Pointp;};}Vertex;这很好,但并不完美。积分等级在那里毫无意义。我希望能够通过键入v.y(而不是v.p.y)访问y坐标。你能建议一个hack来解决这个问题吗(或者告诉我这是不可能的)?

C++ "Choice" union

不确定是否有这个术语,“选择”似乎有效。我在C++中工作,我需要创建一堆union,其中union代表对union成员之一的选择。当前的“选择”被跟踪并始终可用。我目前正在手动编写这些“union”代码,但我想知道是否有任何巧妙的技巧可以(半)自动地执行此类操作。我在第一次尝试实现它时遇到了没有赋值运算符重载或非平凡构造函数或复制构造函数的union限制,但意识到因为我实际上是在跟踪当前的“选择”,所以有在几乎所有情况下都采取非常明确的行为。这就是我现在正在做的事情(只有两个选择,最多可能有10或15个),它的代码量相当大,几乎所有代码都只是样板文件。此外,如果有人对我下面的内容是否有

c++ - 如何将 C++ union 暴露给 Lua

对于我正在进行的项目,我需要将另一个库中的一些C++类公开给Lua。不幸的是,这个库中最重要的类之一有很多union和枚举(thesf::EventclassfromSFML),并且来自quickGooglesearch。我发现将C++union暴露给Lua没有任何意义。我不介意它是通过Lua/CAPI、库还是绑定(bind)生成器公开的,只要它能工作即可。但是,我不想使用绑定(bind)生成器,因为我希望能够在C++中创建一个对象,然后将该对象的实例公开给Lua(除非绑定(bind)生成器可以实现) 最佳答案 要注册C/C++函数

C++ union 用法

到目前为止,我只是使用union来存储成员A或成员B。我现在确实遇到了我想要在运行时更改使用的成员的情况。unionNextGen{std::shared_ptrChild=nullptr;std::vector>Children;};我目前的使用情况:voidTreeRecord::AddChild(conststd::shared_ptr&NewChild){if(_childCount==0){_nextGeneration.Child=NewChild;_childCount++;}elseif(_childCount==1){//Thisisnotcleartome://Do

c++ - 在 C/C++ 中声明函数然后定义它是否内 union 法?

以下在C和/或C++中是否合法?voidfn();inlinevoidfn(){/*Dosomethinghere*/}让我担心的是,第一个声明看起来暗示函数将被定义为非内联,但下面的定义毕竟将它变成了内联。如果在这种情况下C和C++之间存在差异,那么也很高兴知道该差异。 最佳答案 是的。事实上,它可能更可取。来源:http://www.parashift.com/c++-faq/inline-nonmember-fns.html经验法则:声明告诉您如何调用函数并使用其返回值。定义说明当你调用它时会发生什么。您可以将函数更改为内联和

c++ - 指向非 union 类的指针的大小可以不同吗?

我知道有一些硬件平台需要更多信息才能指向char比你需要指向int(具有不可寻址字节的平台,因此指向char的指针需要存储指向单词的指针以及单词中字节的索引)。所以有可能sizeof(int*)在这样的平台上。指向非union类的指针会发生类似的事情吗?C++允许虚函数的协变返回类型。假设我们有这样的类:structGadget{//somecontent};structWidget{virtualGadget*getGadget();};任何调用getGadget()的代码收到Gadget*时必须工作,但相同的代码(实际上是相同的编译二进制代码)在接收到指向派生自Gadget的类型的

c++ - 访问命名 union 中的字段

我想在下面的结构中有一个命名的union,这样我就可以在不知道哪个字段是“事件的”的情况下memcpy它。structLiteral{enumclassType:size_t{INT=1,LONG,FLOAT,DOUBLE}type;union{intli;longll;floatlf;doubleld;}v;constexprLiteral(intli):type{Type::INT},v.li{li}{}constexprLiteral(longll):type{Type::LONG},v.ll{ll}{}constexprLiteral(floatlf):type{Type::F

c++ - 哪些标准允许在 C 和 C++ 中使用匿名结构和 union ?

我们可以在哪里使用匿名结构和union?struct{intbar;};//anonymousstructunion{intbar;};//anonymousunion我认为我们可以按照以下标准来做:union-C++98、C++03、C++11、C11结构-C11我说的对不对 最佳答案 关于C的说法是正确的:匿名结构和union的标准化是相当新的(C11)cfr.GCCman.请注意,您首选的编译器可以启用这些功能作为当前支持标准的扩展(例如GNUC99扩展)。然后,检查旧规范,似乎自1998以来C++支持匿名union。.众所周

c++ - C++11 是否允许非匿名 union 包含静态数据成员?

在C++11中,我声明了以下union:unionU4{charc;inti;staticintsi;};当我使用-std=c++11-pedantic-errors使用g++4.7.0编译此代码时,出现以下错误(经过少量编辑):error:localclass‘unionU4’shallnothavestaticdatamember‘intU4::si’[-fpermissive]error:‘U4::si’maynotbestaticbecauseitisamemberofaunion据我所知,FDIS(N3242)没有明确允许命名union的静态数据成员。但我也看不出FDIS在哪

c++ - 在不久的将来是否有任何主流编译器可能支持 C++0x 无限制 union ?

我一直在寻找,但似乎编译器开发人员对支持这些的兴趣为零。对我来说,这似乎很奇怪——基本上,当前的C++对union有一些限制,这些限制总是令人恼火而且从不合适。您可能认为基本上删除一些错误检查是勾选额外的c++0x支持框的一种相对简单的方法,但AFAICT还没有编译器开发人员这样做。我之所以感兴趣是因为它为数据结构编码中反复出现的问题提供了一个简单的解决方案——如何为一些未知(模板参数)类型的实例保留内存,最好在情况下,但不调用恰好在该类型上定义的任何构造函数。真正重要的一点是必须遵守对齐规则。不受限制的union非常适合此-它为您提供了一个没有构造函数或析构函数的类型,但具有允许任何