草庐IT

c++ - 基于节点的类的子位置?

我正在创建对象,ofNode的实例,我们称它们为卡片。每张卡片都有自己的属性,如按钮、文本和图像,它们在卡片.draw()函数中绘制。如果我更改卡片位置,“子项”对象将不会移动。有没有办法将他们的位置绑定(bind)到他们的卡片对象? 最佳答案 使用setParent方法:ofNodeparent;ofNodechild;child.setParent(parent);parent.setGlobalPosition(10,20,30);child.setPosition(100,200,300);ofVec3fpos=child.

c++ - 有什么方法可以转储 g++ 编译程序的类布局

当使用g++编译时,-fdump-class-hierarchy以(或多或少)人类可读的格式导出程序的虚表。但是,生成的文件只包含有关vtable的信息,不有关类布局本身的信息。我想获得我所有程序类布局的综合列表。clang提供了-cc1-fdump-record-layouts参数来实现这一点。可以使用-d1reportAllClassLayout调用MS编译器。是否有任何g++开关可以执行此操作? 最佳答案 如果程序编译时带有调试信息,您可以使用pahole从调试信息中转储struct和vtable布局:g++-ggdb3-cp

c++ - 从 enable_shared_from_this 返回 self 的 shared_ptr 继承的类的子类

我想知道是否有像这样的伪代码来做一些事情:classA:publicstd::enable_shared_from_this{public:std::shared_ptrgetPtr(){returnstd::static_pointer_cast(shared_from_this());}};classB:publicA{std::vectorcontainer;std::shared_ptraddChild(Achild){container.push_back(child);returngetPtr();}};classC:publicB{public:std::shared_p

c++ - 我可以继承模板类并将类型设置为我当前尝试继承的类的模板化子类吗?

糟糕的标题,我知道。我将举例说明:templatestructMemMapFileHashTable:MemMapFileStructured::kvp>{structkvp{uint32_tkey;ValTypeval;};MemMapFileHashTable(constchar*fileName,boolwrite=false,int64_tchunkB=65536):MemMapFileStructured(fileName,write,chunkB){}};所以我的想法是,我创建一个具有特定ValType的哈希表,该哈希表又具有具有特定ValType的kvp。要使用我正在继承

c++ - 指向组合接口(interface)的指针 - 指向实现一个接口(interface)并从另一个接口(interface)的实现扩展的类

我有两个接口(interface):classFirstInterface{virtualintgetId()const=0;};classSecondInterface{virtualvoidsetId(intid)=0;};这是一个组合界面:classCombinedInterface:publicFirstInterface,publicSecondInterface{};这是第一个接口(interface)的具体类:classFirstConcrete:publicFirstInterface{virtualintgetId()const{return1;}};现在,这个类Co

c++ - 具有非类型参数包的模棱两可的类模板实例化

我试图专门化Expr:#include#include#includetemplatestructExpr{Expr(){std::coutstructExpr...>>{Expr(){std::coutstructExpr...>>{Expr(){std::cout>mylist;Exprtest{};return0;}但是,我遇到了以下编译器错误:[x86-64gcc6.3]error:ambiguoustemplateinstantiationfor'structExpr>>'[x86-64gcc6.3]error:variable'Expr>>test'hasinitializ

c++ - 非抽象但无状态的类对于多重继承是否与纯抽象类一样安全?

在大多数书籍和文章中,进行多重继承的唯一“安全”(或者至少是唯一建议的)方法是使用纯抽象基类(您可以称为虚拟接口(interface))的虚拟继承。原因主要是为了避免菱形继承(钻石问题),在菱形继承(钻石问题)中,人们可能会为数据成员的值或非纯虚函数的实现状态造成歧义。纯抽象基类不会同时遭受(没有数据成员,没有非纯虚拟)和虚拟继承甚至解决了基类实际内存地址的歧义。但是给出这样的解释:如果歧义仅来自“状态”的形式(例如数据成员、静态函数变量),那么就不是无状态非抽象(甚至可能具有所有“最终”方法)类作为多继承层次结构中的基类是否同样安全?我遗漏了什么可能的问题?PS:如果答案是“如果没有

c++ - 不明确的类命名空间问题

我...觉得问这个问题真的很傻,但我不确定如何解决这个问题。这是我的代码(Objective-C++)的一小段:#include"eq/eq.h"namespaceeqOther{classWindow:publiceq::Window//我得到的错误是:Useof'Window'isambiguous它说它在X.h中被声明为typedefXIDWindow而在window.h中被声明为classeq::Window是它的父类(superclass)。我声明的类应该在namespaceeqOther是吗?eqOther::Window不同于eq::Window!?我觉得自己太蠢了,但我

c++ - 使库函数使用从库类派生的类

我有一个可以自己构建的.dll。我有一个类Lion,派生自库中的一个类Cat,它覆盖了一个虚函数Leap()。我想创建一个Lion类型的对象,将它传递给需要Cat类型的库函数,这样当它们调用Cat->Leap(),它们使用重写的虚函数,Lion->Leap()。这有可能吗?到目前为止,我尝试过的所有操作都以忽略覆盖函数而告终。我猜这是因为当库被编译时,它会计算出如何解析对Leap()的调用,此时我的派生类型不存在。或者,因为库引用了Cat类型的对象(实际上是Lion类型的对象),所以它调用Cat::Leap(),而不是Lion::Leap()。我原以为函数是虚拟的这一事实意味着,即使它

c++ - 如何防止使用尚未构造的类成员?

我有以下类(class):classA{public:A(){x=0;std::cout和一个以对象A作为参数创建对象B的函数:BcreateB(constA&a){std::cout如果我设计一个C类,它具有类型A和B的成员,并在构造A对象之前构造B对象但是使用A对象来这样做,这将在没有编译的情况下进行编译警告,但它会默默地输入错误:classC{public:C():b(createB(a)),a(10){}private:Bb;Aa;};intmain(){Cc;return0;}当然,上面的例子是一个微不足道的例子,但我在现实世界中看到过它,代码复杂得多(现在是星期五,晚上8: