【发布时间】:2012-09-04 22:24:31
【问题描述】:
我正在尝试创建一个通用类,我可以使用一组枚举来启动其中的值。例如:
constructor TManager<TEnum>.Create;
var
enum: TEnum;
enumObj: TMyObject;
begin
fMyObjectList:= TObjectDictionary<TEnum,TMyObject>.Create([doOwnsValues],10);
for enum:= Low(TEnum) to High(TEnum) do
begin
enumObj:= TMyObject.Create();
fMyObjectList.Add(enum, enumObj);
end;
end;
另外,后面的方法会通过枚举值获取对象,例如:
function TManager<TEnum>.Fetch(enum: TEnum): TMyObject;
begin
fMyObjectList.TryGetValue(enum, Result);
end;
然而,作为通用参数传递,delphi 并不知道 TEnum 将是一个枚举。我可以以某种方式强制执行吗?
【问题讨论】:
-
旁注:我确信在泛型单元中可能有一个实际的地图数据结构。如果您立即知道,请随时指出。
-
TDictionary
怎么样? -
您可以使用
record约束来限制值类型。像这样:type TManager<TEnum: record> = class ...然后编译器将阻止接口和类用于TEnum但是您目前(XE6 及之前)不能在编译时进一步限制值类型。