【发布时间】:2021-07-31 13:48:50
【问题描述】:
我正在尝试优化一些这样的代码:
// RequestType inherits MessageType
void receive_message (MessageType* M)
{
auto msg = dynamic_cast<RequestType>(M);
if (msg != nullptr)
{
// do something
}
}
程序直到运行时才知道MessageType 的具体类型。
在代码中,dynamic_cast被反复使用,占用了大量资源。所以我寻找替代品,LLVM 的dyn_cast 出现了。从手册上看,dyn_cast 似乎没有使用 VMT,所以这样更有效。
但是,当我搜索它的使用时,似乎没有太多关于这个主题的内容?大多数问题都可以追溯到 2010 年代,所以我想知道它现在是否仍在使用,或者是否有更好的选择(例如 typeid 等)/或者是否有原因它没有被广泛使用?
如果有人能阐明这一点,那就太好了。提前谢谢!
【问题讨论】:
-
如果您查看 LLVM 源代码 (here's a list of recent commits),您会看到使用了 dyn_cast。在 LLVM 源代码中使用,其类具有必要的管道。
标签: c++ casting c++17 llvm dynamic-cast