gpt4 book ai didi

c++ - clang 中方法 classof 的目的是什么?

转载 作者:行者123 更新时间:2023-11-30 02:44:28 24 4
gpt4 key购买 nike

让我举个例子来解释我想做什么(或者至少知道这是否可行):

在 Clang 中,让我们使用一些基本的 ValueDecl .正如您在提供的链接中所见,此 ValueDecl 可以:

我想知道,给定一个 ValueDecl *,我是否可以确定它是否是上面列出的类之一,或者我是否受此 ValueDecl * 的约束?

在每个类(class),都有这个bool classof()方法,但我不明白这个方法的目的。它可以解决我的问题吗?

最佳答案

classof确实是解决方案的一部分,但通常并不意味着直接使用。

相反,您应该使用 isa<> , cast<> and dyn_cast<> templates . LLVM 程序员手册中的示例:

static bool isLoopInvariant(const Value *V, const Loop *L) {
if (isa<Constant>(V) || isa<Argument>(V) || isa<GlobalValue>(V))
return true;

// Otherwise, it must be an instruction...
return !L->contains(cast<Instruction>(V)->getParent());
}

cast<>之间的区别和 dyn_cast<>是前者断言是否无法转换实例,而前者仅返回空指针。

备注:cast<>dyn_cast<>不允许空参数,您可以使用 cast_or_null<>dyn_cast_or_null<>如果参数可能为空。


对于没有virtual的多态设计的进一步理解方法,参见 How is LLVM isa<> implemented , 你会注意到它使用了 classof在幕后。

关于c++ - clang 中方法 classof 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25303157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com