在此代码中:
TTest<IntfT: IInterface> = class
protected
fObj : TInterfacedObject;
public
function GetVal: IntfT;
end;
如果我希望GetVal函数将fObj作为IntfT返回,该如何实现?
我试过了:
result := fObj as IntfT;
和
fObj.QueryInterface(IntfT,result);
和
result := fObj as IInterface;
但似乎没有任何效果。这似乎是一件简单的事情,我一直认为我一定会丢失一些东西。
有任何想法吗?
编辑
对我来说,现在看来最有前途的是QueryInterface。当前,编译器抱怨IntfT不是GUID,而我的印象是,如果我拥有适当的GUID,一切都会很高兴。有人知道在这种情况下可以从接口类型获取IID的方法吗?
最佳答案
result := fObj as IntfT;
应该可以工作,但是显然编译器不太了解接口是泛型的。您应该在质量控制中报告此情况。fObj.QueryInterface(IntfT,result);
不起作用,因为QueryInterface是TInterfacedObject的受保护成员。同样,QueryInterface通过调用GetInterface来工作,该方法查找GUID,而GUID和泛型并不能很好地融合在一起。result := fObj as IInterface;
确实适合我进行编译。你有什么问题?