0

我正在使用 LLVM 库设计一个 API,该库将接受输出流作为其构造函数参数之一。LLVM 编码标准规定以下内容:

使用 raw_ostream

LLVM 在 llvm/Support/raw_ostream.h 中包含一个轻量级、简单且高效的流实现,它提供了 std::ostream 的所有通用特性。所有新代码都应使用 raw_ostream 而不是 ostream。

与 std::ostream 不同,raw_ostream 不是模板,可以前向声明为类 raw_ostream。公共标头通常不应包含 raw_ostream 标头,而是使用前向声明和对 raw_ostream 实例的常量引用。

我必须遵守 LLVM 编码标准,因此我尝试在构造函数中接受 raw_ostream 作为参数。我尝试通过引用和指针传递 raw_ostream,但在编译时收到以下错误消息:

注意:候选构造函数不可行:没有从 'llvm::raw_ostream &()' 到 'llvm::raw_ostream &' 的已知转换...

我的构造函数应该是什么样子才能接受“llvm::raw_ostream &()”类型的参数?我想为此输出流初始化一个类成员。

这是我当前的代码:

构造函数

MyClass(raw_ostream &OS) : OutputStream(OS) {}

呼叫者

MyClass x = new MyClass(&outs);

outs记录在此链接的第 665 行

4

1 回答 1

3

LLVM 源代码中有大量示例,其中raw_ostream是函数/方法参数。几乎总是(..., raw_ostream &OS, ...)

下面是一个代表性的例子CodeGen/AsmPrinter/AsmPrinter.cpp

static void emitComments(const MachineInstr &MI, raw_ostream &CommentOS) {
  // ... code
}
于 2013-05-09T17:02:50.223 回答