Мне нужен класс или структура, которая бы выглядела как
struct ThingReader {
???? lines;
Thing thing;
this(File f) {
this.lines = f.byLine;
popFront;
}
@property bool empty() { return lines.empty; }
@property ref Thing front() { return thing; }
void popFront() {
if (! empty) {
auto l = lines.front;
lines.popFront;
parseLine(l, thing); // Not shown
}
}
}
но я не знаю, какое объявление типа поместить в место, где ???? есть.
Если я попытаюсь auto lines
, то ошибка «Ошибка: нет идентификатора для строк объявления».
Если я оставлю вывод типа для компилятора и попробую что-то вроде:
struct ThingReader(Lines) {
Lines lines;
Thing thing;
this(File f) {
this.lines = f.byLine;
popFront;
}
// etc.
}
тогда компилятор, кажется, в порядке с этим объявлением, но когда я позже пытаюсь объявить auto reader = ThingReader(f)
, я получаю
"Ошибка: struct huh.ThingReader не может вывести функцию из типов аргументов! () (Файл)".
Функция File.byLine объявлена для возврата auto
, но это (см. Выше) делает
не работает для меня.
Когда я объявляю auto lines = f.byLine
и проверяю его тип, я вижу
что это ByLine!(char, char)
.
Когда я пытаюсь объявить ByLine lines
, я получаю «Ошибка: неопределенный идентификатор ByLine»
и когда я пытаюсь объявить std.stdio.ByLine lines
, я получаю
"Ошибка: неопределенный идентификатор ByLine в модуле std.stdio".
Когда я пытаюсь объявить ByLine!(char, char)
, я получаю «Ошибка: шаблон
экземпляр ByLine! (char, char) шаблона 'ByLine' не определен ", и
std.stdio.ByLine!(char, char)
дает мне "Ошибка: идентификатор шаблона
'ByLine' не является членом модуля 'std.stdio' ".