如何声明变量 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
模块外部引用。
我需要一个 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
模块外部引用。