jjzjj

downcast

全部标签

c++ - static_pointer_cast<Derived> pReallyABase = static_pointer_cast<Derived>(pBase) 有效!为什么?

这个问题在这里已经有了答案:Downcastingusingthe'static_cast'inC++(3个答案)关闭8年前。我不明白为什么会这样。pReallyABase是一个向下转换的shared_pointer,它指向一个基类实例。我理解为什么编译器让我调用pReallyABase->onlyForDerived()因为我将它定义为派生类指针,但是当我尝试使用该指针调用派生类函数时为什么没有出现运行时错误?classBase{public:virtualstringwhatAmI(){return"IamaBase";}};classDerived:publicBase{publ

c++ - 如何从非多态虚基类向下转型?

有没有办法在不涉及虚函数的情况下从虚基类向下转型为派生类?下面是一些代码来演示我在说什么:structBase1{intdata;};structBase2{charodd_size[9];};structViBase{doublevalue;};structMostDerived:Base1,Base2,virtualViBase{boolok;};voidfoo(ViBase&v){MostDerived&md=somehow_cast(v);//butHOW?md.ok=true;}intmain(){MostDerivedmd;foo(md);}请注意,该代码仅用于演示。我的真

c++ - 如何使用 dynamic_cast 正确向下转换?

我对dynamic_cast很困惑.来自C++Primer和cppreference的Material(规则5)不能帮助我理解。(cppreference比书难得多,我都非常仔细地阅读了它们)来自C++Primer5th:dynamic_cast(e)Inallcases,thetypeofemustbeeitheraclasstypethatispubliclyderivedfromthetargettype,apublicbaseclassofthetargettype,orthesameasthetargettype.Ifehasoneofthesetypes,thentheca

c++ - boost::shared_polymorphic_downcast 在 boost 1.53.0 中消失了。我应该用什么代替?

boost::shared_polymorphic_downcast在boost1.52.0之间消失了和1.53.0.releasenotes中对此没有提及。,并且提交(r81463)仅包含神秘的日志消息“更新shared_ptr转换。”我不清楚我现在应该使用什么,或者为什么删除此功能。有人可以帮忙吗?编辑:感谢大家富有洞察力的评论。我发现自己有点沮丧,因为boost会在没有任何理由或通知的情况下在版本中做出向后不兼容的更改,而且我也感到沮丧的是它们删除了有用的功能。但是根据响应,我可以用两行代码而不是一行代码来完成我想做的事情,所以我认为这就足够了。尽管如此,我仍将这个问题“悬而未决

c++ - 为什么从指向基的指针到指向派生的指针的 static_cast 是 "invalid?"

所以我有这段代码:Node*SceneGraph::getFirstNodeWithGroupID(constintgroupID){returnstatic_cast(mTree->getNode(groupID));}mTree->getNode(groupID)返回一个PCSNode*。Node公开派生自PCSNode。我在static_cast上找到的所有文档都说明了这一点:“static_cast运算符可用于将指向基类的指针转换为指向派生类的指针等操作。”然而,XCode的(GCC)编译器说从PCSNode*到Node*的static_cast无效且不允许。这是什么原因?当我

c++ - 为什么不将自动向下转换应用于模板函数?

有人问thisquestion关于字符串追加。是strings;s=s+2;未编译。人们给出的答案是operator+被定义为模板函数而operator+=不是,所以自动向下转换(int(2)到char(2))不适用。原型(prototype)是templateclassbasic_string{basic_string&operator+=(_CharT__c);};templateinlinebasic_stringoperator+(constbasic_string&__lhs,_CharT__rhs);为什么编译器不能只使用这个原型(prototype)并将int(2)转换为

c++ - 从基指针向下转换为模板派生类型

我有以下层次结构:classbase{public:virtual~base(){}virtualvoidfoo(){}};templateclassderived1:publicbase{virtualvoidfoo(){};};templateclassderived2:publicbase{virtualvoidfoo(){};};现在给定一个指向基的指针,我想知道是否underlying是derived1或derived2。问题是derived1和derived2都可以专门用于许多不同的类型,使用dynamic_cast测试向下转换需要要知道的模板类型。我最终得到了一些困惑、无

swift - 对 AnyObject 失望?

我有点不明白下面的代码是怎么回事。我的印象是children是一个可选的,基于node.children(类型为[AnyObject])是[SKNode]我看到的是children永远不会是nil,这是因为[AnyObject]不包含任何类型的信息?即使我将[SKNode]更改为[NSString]它仍然会转到(1)?ifletchildren=node.childrenas?[SKNode]{//(1)STUFFWITHSKNODE...}else{//(2)NOPE,ITSNOTANSKNODE 最佳答案 node.childr

快速编译错误: Downcast from 'String?!' to 'String' only unwraps optionals; did you mean to use '!!' ?

升级到cocoapods1.0后,我得到以下代码行的编译错误:varstrName=String()varstrEmail=String()varstrFacebookID=String()varstrPassword=String()varobjHelper=Helper()....letstrFirstName=result["first_name"]as!StringletstrLastName=result["last_name"]as!Stringself.strName=strFirstName+"_"+strLastNameself.strEmail=result["em

ios - 作为 Y 的子类的类型 X 的向下转换集

注意:虽然问题有一个CoreData例如,它与CoreData无关,这只是一个例子我们正在使用CoreData开发一个Swift项目作为缓存层。我们利用Notification在我们的mainViewController多多聆听我们NSManagedObjectContext之后的变化有新变化。在我们添加具有以下层次结构的新实体之前,这一直很好用:实体Vehicle是具有某些属性的基类。实体Car是Vehicle的子类具有特定属性和与Human的toMany关系实体。实体Human是具有特定属性的基类,它与Car有关系.问题如下:当一个新的Car添加对象,触发通知,并在mainView