c++ 正在LLVM中创建raw_ostream对象

olqngx59  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(121)

创建raw_ostream对象并将其用于打印的正确方法是什么?我阅读了各种文章,我能找到的唯一示例是(How to redirect llvm::outs() to file?

raw_ostream *output = &outs();

它利用了llvm::out。
很抱歉问这个问题,因为我不太熟悉C++,但必须了解LLVM是如何工作的。

hmae6n7t

hmae6n7t1#

llvm::raw_ostream is an abstract class with two important pure virtual functions implemented by subclasses; write_impl() which holds the logic for writing data to the underlying stream and current_pos() which returns the position currently being written to in the stream.
LLVM provides the following output stream implementations:

  • outs() for writing to stdout
  • errs() for writing to stderr
  • nulls() which discards the output (like writing to /dev/null)
  • raw_fd_ostream(StringRef, std::error_code) for writing to a file descriptor
  • raw_string_ostream(std::string) for writing to a std::string

The first 3 streams directly return a reference to their stream objects. For example:

llvm::raw_ostream &output = llvm::outs();

For the other streams, you construct objects the old way. For example:

std::string str;
llvm::raw_string_ostream output(str);

For printing, every llvm::Value* has a print method that accepts a raw_ostream object.

相关问题