不完全确定如何提出这个问题,但是使用lazarus v1.8.2我试图使用另一种泛型类型来定义泛型类型:
//initial interface
IOtherInterface<T> = interface
function ExampleFunction : T;
end;
//some generic record
TSomething<T> = record
Something : T;
end;
//attempting to further genericize
IOtherSomething<T> = IOtherInterface<TSomething<T>>;
我收到的错误是:
Fatal: Syntax error, "," expected but "<" found
我使用的是delphi模式,因为我希望两个编译器保持兼容。我非常有信心我以前在delphi中完成了这种专业化,但是没有很好的专业版本可以测试。 这是对FPC方面的限制,还是我错过了什么?非常感谢任何帮助
答案 0 :(得分:1)
我不确定是什么
IOtherSomething<T> = IOtherInterface<TSomething<T>>;
意在这里实现。如果您尝试扩展界面,则需要类似
的内容IOtherSomething<T> = interface(IOtherInterface<TSomething<T>>)
end;
在Delphi中编译。我没有拉撒路来测试。
如果这不是您要做的,我将删除答案。
如果是,我会编辑删除这些评论。
答案 1 :(得分:0)
Afaik你还应该声明IOtherInterface,然后将它专门用于TSomething。
Generics.Collections以这种方式工作(TPair扮演TSomething的角色)。
无论如何,FPC修复有双重特化的问题,它看到&gt;&gt;或&lt;&lt;作为转移代币。这在主干
中修复