【发布时间】:2013-05-09 16:36:28
【问题描述】:
我正在使用 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 的第 665 行开始
【问题讨论】:
-
显示你现有的构造函数。
-
MyClass(const raw_ostream &OS) : OutputStream(OS) {}
-
你确定它应该是 const 吗?
-
OutputStream是raw_ostream或raw_ostream &? -
我认为我的问题是我需要传递
outs()作为构造函数参数而不是&outs。现在可以了!
标签: c++ llvm llvm-c++-api