我目前正在编写一个依赖于另一个库的软件,该库大量使用LLVMs RTTI系统。我不能更改上述库的API,它迫使我在几个类型及其子类型上实现非常大的if-否则语句。通常我会在开关语句中使用,但是使用LLVM的dyn_cast<>()显然是不可能的。
下面是我目前所做工作的一个例子,然而,事实证明这是一个真正的瓶颈。是否有更好的方法来实现同样的目标,但开销更小?
谢谢你一吨!
if (const SomeClass *casted = dyn_cast<SomeClass>(something))
{
...
}
else if (const anotherClass *casted = dyn_cast<AnotherClass>(something))
{
...
}
...
else
{
...
}发布于 2022-09-07 07:03:18
有时您可以切换(something->getType()->getTypeId()),但是一些dyn_cast<>()调用可能是不可避免的,例如对于您定义的结构类型。
https://stackoverflow.com/questions/73630821
复制相似问题