设计API以接受通用输出流作为参数

时间:2013-05-09 16:36:29

标签: c++ llvm llvm-c++-api

我正在使用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);

outsthis link

的第665行开始记录

1 个答案:

答案 0 :(得分:3)

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

以下是CodeGen/AsmPrinter/AsmPrinter.cpp的代表性示例:

static void emitComments(const MachineInstr &MI, raw_ostream &CommentOS) {
  // ... code
}