草庐IT

qobject_cast

全部标签

c++ - QObject克隆

我知道Qobjects应该是身份而不是值,例如你不能复制它们,默认情况下,复制构造函数和赋值被禁用,如qt文档中所述。但是是否可以使用克隆方法从现有的QObject创建新的QObject?这会是逻辑错误吗?如果我说QObjectb;QObjecta;b.cloneFrom(a);或QObjecta=newQOBject();QObjectb=newQOBject();b->cloneFrom(a);克隆方法会复制成员等内容,这是错误的吗?如果可以的话,我可以编写自己的复制构造函数和赋值运算符吗?注意:我实际上想用继承qobject的类来尝试这个。 最佳答案

c++ - 如何使用 reinterpret_cast 转换为 C++ 中的派生类指针

这是我的测试示例:structbase{virtual~base(){}intx;};structderived:publicvirtualbase{base*clone(){returnnewderived;}derived():s("a"){}std::strings;};intmain(){derivedd;base*b=d.clone();derived*t=reinterpret_cast(b);std::couts它在我打印s的那一行崩溃了。由于“b”是指向派生类的指针,因此reinterpret_cast应该可以正常工作。我想知道为什么它会崩溃。同时,如果我用dynami

c++ - 是否可以使用 dynamic_cast 进行模板类型检查?

templatevoidcheckObject(TgenericObject){MyClassA*a=dynamic_cast(genericObject);if(a!=NULL){//weknowitisoftypeMyClassA}MyClassB*b=dynamic_cast(genericObject);if(b!=NULL){//weknowitisoftypeMyClassB}}这样的事情可能吗?我们有一个模板类型,但我们想知道它是实际类型吗? 最佳答案 在模板世界中,您可能只想为每种类型专门化模板,而不是进行运行时检查

c++ - 为什么我在使用 dynamic_cast 和模板时收到错误 "A is an inaccessible base of B"?

为什么对f的调用没有解析为第一个函数重载?我收到错误:source.cpp:Infunction'intmain()':source.cpp:12:31:error:'A'isaninaccessiblebaseof'B'classA{};classB:A{};voidf(constA&){std::coutvoidf(T){std::cout(b));}请注意,如果我取出dynamic_cast,代码将起作用,但secondf被调用(它打印“Generic”)。但我想做的是接到第一个电话。我认为dynamic_cast会起作用,但由于某种原因它会导致问题。我在这里做错了什么?

c++ - 使用 dynamic_pointer_cast 时无法动态转换

为什么这段代码不起作用?std::shared_ptre=ep->pop();std::shared_ptrt;t=std::dynamic_pointer_cast(e);我收到以下错误:/usr/include/c++/4.6/bits/shared_ptr.h:386:error:cannotdynamic_cast'(&__r)->std::shared_ptr::.std::__shared_ptr::get[with_Tp=Event,__gnu_cxx::_Lock_policy_Lp=(__gnu_cxx::_Lock_policy)2u]()'(oftype'clas

c++ - QObject::connect 没有匹配函数

我正在编写一个程序,每10毫秒发送一个UDP帧。以下是我的程序应该如何工作:我有一个客户端类://ConstructorclientSupervision::clientSupervision(){}voidclientSupervision::sendDataUDP(){//Createaframeandsendit...}voidclientSupervision::sendDataUDPTimer(inttimer){QTimer*tempsEnvoieTrameSupervision=newQTimer();//CreateatimertempsEnvoieTrameSuper

c++ - 是否使用 const_cast 对 const 对象进行只读访问?

在C++中,我有一个函数只需要对数组进行只读访问,但被错误地声明为接收非常量指针:size_tcountZeroes(int*array,size_tcount){size_tresult=0;for(size_ti=0;i我需要为常量数组调用它:staticconstintArray[]={10,20,0,2};countZeroes(const_cast(Array),sizeof(Array)/sizeof(Array[0]));这会是未定义的行为吗?如果是这样-程序何时会遇到UB-在执行const_cast和调用函数时或在访问数组时? 最佳答案

c++ - 有没有一种方法可以在不创建该类实例的情况下获取 QObject 派生类的类名?

我正在寻找这样的东西:MyClass::metaObject()->className()这是行不通的,因为在执行这段代码的地方,不存在MyClass的实例化。如果这在某种程度上是可能的,是否有办法获取从MyClass派生的类的所有名称? 最佳答案 使用staticmetaobject:MyClass::staticMetaObject.className()有效! 关于c++-有没有一种方法可以在不创建该类实例的情况下获取QObject派生类的类名?,我们在StackOverflow上

c++ - dynamic_cast 失败

我有一个基类和一个派生类。每个类都有一个.h文件和一个.cpp文件。我在下面的代码中将基类对象动态转换为派生类:h文件:classBase{public:Base();virtual~Base();};classDerived:publicBase{public:Derived(){};voidfoo();};classAnother{public:Another(){};voidbar(Base*pointerToBaseObject);};cpp文件:Base::Base(){//dosomething....}Base::~Base(){//dosomething....}voi

C++ 类型转换 : benefit of using explicit casts?

在C++中使用这些运算符而不是隐式转换有什么好处?dynamic_cast(expression)reinterpret_cast(expression)static_cast(expression)为什么、在哪里、在什么情况下我们应该使用它们?在OOP中很少使用它们是真的吗? 最佳答案 从您提供的转换列表中,唯一可以用来替代隐式转换的是static_cast。dynamic_cast用于将父类(superclass)向下转换为其子类。这不可能隐式发生,实际上在OOP中并不罕见。static_cast也可以用在这样的转换中,但是它更