首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ RTTI可行示例

C++ RTTI可行示例
EN

Stack Overflow用户
提问于 2008-10-26 18:58:34
回答 10查看 18.8K关注 0票数 31

我很熟悉C++ RTTI,并且觉得这个概念很有趣。

尽管如此,滥用它的方式还是比正确使用它的方法多得多(RTTI-开关恐惧浮现在脑海中)。作为一名开发人员,我发现(并使用)它只有两个可行的用途(更确切地说,是一个半)。

您能分享一下RTTI是解决问题的可行方法吗?

注意:目的是让初级开发人员能够参考、批评和学习一个可行的示例库。

编辑:使用C++ RTTI在下面的代码中找到

代码语言:javascript
复制
// A has a virtual destructor (i.e. is polymorphic)
// B has a virtual destructor (i.e. is polymorphic)
// B does (or does not ... pick your poison) inherits from A

void doSomething(A * a)
{
   // typeid()::name() returns the "name" of the object (not portable)
   std::cout << "a is [" << typeid(*a).name() << "]"<< std::endl ;

   // the dynamic_cast of a pointer to another will return NULL is
   // the conversion is not possible
   if(B * b = dynamic_cast<B *>(a))
   {
      std::cout << "a is b" << std::endl ;
   }
   else
   {
      std::cout << "a is NOT b" << std::endl ;
   }
}
EN

回答 10

Stack Overflow用户

发布于 2008-10-26 19:40:41

无环游客 (pdf)是一个很好的使用它。

票数 8
EN

Stack Overflow用户

发布于 2008-10-26 21:11:07

如何推动::任何物体!

这基本上使用RTTI信息来存储任何对象,而检索对象则使用boost::any_cast<>。

票数 8
EN

Stack Overflow用户

发布于 2008-10-26 21:47:33

您可以使用RTTI和dynamic_cast获得一个指向派生类的指针,以便使用它来调用快速、类型专门化的算法。它将进行直接和内联的调用,而不是通过基类使用虚拟方法。

这大大加快了我使用GCC的速度。Visual似乎没有那么好,它可能有一个较慢的dynamic_cast查找。

示例:

代码语言:javascript
复制
D* obj = dynamic_cast<D*>(base);
if (obj) {
    for(unsigned i=0; i<1000; ++i)
        f(obj->D::key(i));
    }
} else {
    for(unsigned i=0; i<1000; ++i)
        f(base->key(i));
    }
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/238452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档