如何声明变量 File.byLine() 赋值给?

How to declare the variable File.byLine() is assigned to?

我需要一个 class 或类似于

的结构
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 那么错误是 "Error: no identifier for declarator lines"。

如果我将类型推断留给编译器并尝试类似的操作:

struct ThingReader(Lines) {
    Lines lines;
    Thing thing;

    this(File f) {
        this.lines = f.byLine;
        popFront;
    }
    // etc.
}

然后编译器似乎可以接受这个声明,但是当我稍后尝试声明一个 auto reader = ThingReader(f) 时,我得到 "Error: struct huh.ThingReader cannot deduce function from argument types !()(File)".

File.byLine 函数被声明为 return auto 但是(见上文) 不适合我。

当我声明一个 auto lines = f.byLine 并检查它的类型时,我可以看到 它是 ByLine!(char, char).
当我尝试声明 ByLine lines 时,我得到 "Error: undefined identifier ByLine" 当我尝试声明 std.stdio.ByLine lines 时,我得到 "Error: undefined identifier ByLine in module std.stdio".
当我尝试声明 ByLine!(char, char) 时,出现“错误:模板 instance ByLine!(char, char) template 'ByLine' is not defined”,以及 std.stdio.ByLine!(char, char) 给我“错误:模板标识符 'ByLine' 不是模块 'std.stdio' 的成员。

正如Adam在评论中提到的,你可以使用typeof(File.byLine())来推断你想要的类型;有必要添加最后一个括号,这就是 typeof(File.byLine) 不起作用的原因。 不能显式指定 lines 类型的原因是 byLine 函数返回的结构是私有的,因此不能从 std.stdio 模块外部引用。