gpt4 book ai didi

delphi - "As"约束泛型类型的运算符

转载 作者:行者123 更新时间:2023-12-03 15:53:35 24 4
gpt4 key购买 nike

考虑:

TTest <T : class, constructor> = class 
public
function CreateMyObject : T;
end;
function TTest<T>.CreateMyObject : T;
var
Obj : TObject;
begin
Obj := T.Create;
Result := (Obj as T);
end;

为什么这不可能?编译器为 as 运算符生成“运算符不适用于此类型”错误消息。 T 被限制为类类型,所以这应该可以工作,不是吗?

感谢您的帮助。

最佳答案

我遇到了同样的问题,并通过向类添加低级指针复制方法作为解决方法来解决它:

  TTest <T : class, constructor> = class
private
function _ToGeneric(AItem: TObject): T; inline; //inline, so it's a little faster
public
function CreateMyObject : T;
end;

function TTest<T>.CreateMyObject : T;
var
Obj : TObject;
begin
Obj := T.Create;
Result := _ToGeneric(Obj);
end;

function TTest<T>._ToGeneric(AItem: TObject): T;
begin
System.Move(AItem,Result,SizeOf(AItem))
end;

关于delphi - "As"约束泛型类型的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1237740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com