C++ RTTI 可行的例子

标签 c++ rtti

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

仍然存在很多滥用它的方法而不是正确使用它(RTTI 切换恐惧浮现在脑海中)。作为一名开发人员,我发现(并使用)了它只有两种可行的用途(更准确地说是一种半)。

您能否分享一些 RTTI 是解决问题的可行方法,包括示例代码/伪代码?

注意:目的是建立一个可供初级开发人员引用、批评和学习的可行示例库。

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

// 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 ;
   }
}

最佳答案

Acyclic Visitor (pdf) 是一个很好的用途。

关于C++ RTTI 可行的例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/238452/

相关文章:

c++ - C++ 中的双向关联

multithreading - 将任意数据存储到对象实例中

c++ - 在 MSVC ABI 中,如何可靠地找到仅给出 (void*) 的 vtable?

delphi - 如何在Delphi中获取方法参数名称数组/列表?

c++ - 如何解决 g++ 问题 "internal compiler error: Illegal instruction min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MIN__; }"?

python - 如何为所有函数和类包含一个 cpp 文件但忽略主要函数?

c++ - 帮助在 gcc 中链接

c++ - 如何将 uint8 转换为表示字节的结构?

gdb - 使用 boost::iostreams 时未找到警告消息 RTTI 符号

c++ - 在 OO 设计中避免 RTTI