我正在使用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
从this link
答案 0 :(得分:3)
LLVM源中有大量示例,其中raw_ostream
是函数/方法参数。它几乎总是(..., raw_ostream &OS, ...)
以下是CodeGen/AsmPrinter/AsmPrinter.cpp
的代表性示例:
static void emitComments(const MachineInstr &MI, raw_ostream &CommentOS) {
// ... code
}