0

出力ストリームをコンストラクタ パラメータの 1 つとして受け入れる LLVM ライブラリを使用して API を設計しています。LLVM コーディング標準では、次のことが規定されています。

raw_ostream を使用する

LLVM には、軽量でシンプルかつ効率的なストリーム実装が llvm/Support/raw_ostream.h に含まれており、std::ostream のすべての共通機能を提供します。新しいコードはすべて、ostream の代わりに raw_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

raw_ostream関数/メソッドの引数であるLLVMソース内には、たくさんの例があります。ほぼいつもです(..., raw_ostream &OS, ...)

の代表的な例を次に示しCodeGen/AsmPrinter/AsmPrinter.cppます。

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