Разработка API для приема общего потока вывода в качестве параметра

Я разрабатываю API с использованием библиотеки LLVM, которая будет принимать поток вывода в качестве одного из параметров конструктора. Стандарты кодирования 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 задокументировано, начиная с строки 665 эта ссылка

0

Решение

Есть множество примеров в источнике LLVM, где raw_ostream является аргументом функции / метода. Это почти всегда (..., raw_ostream &OS, ...)

Вот типичный пример из CodeGen/AsmPrinter/AsmPrinter.cpp:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]