gpt4 book ai didi

delphi - 在 TDictionary 中使用 "class of"?

转载 作者:行者123 更新时间:2023-12-03 15:27:19 26 4
gpt4 key购买 nike

想法很简单 - 将带有类名的 TDictionary 制作到 TComponent 中使用

for enum in vm.ClassNameToComponent do
TLuaClassTemplate<enum.Value>.RegisterClass(vm.LS, PrintGlobal, container, vm);

用枚举代替

TLuaClassTemplate<TButton>.RegisterClass(vm.LS, PrintGlobal, container, vm);
TLuaClassTemplate<TPanel>.RegisterClass(vm.LS, PrintGlobal, container, vm);
TLuaClassTemplate<TEdit>.RegisterClass(vm.LS, PrintGlobal, container, vm);
...

并使用从 xml 获取的类名来处理基于泛型的类。
但有一个问题:

TClassNameToComponentDict = TDictionary<string, TComponent>;
...
ClassNameToComponent: TClassNameToComponentDict;
...
ClassNameToComponent := TClassNameToComponentDict.Create;
ClassNameToComponent.Add('TButton', TButton);
ClassNameToComponent.Add('TPanel', TPanel);
ClassNameToComponent.Add('TEdit', TEdit);
...

错误“类型‘TComponent’和‘TButton 类’不兼容”。
如何使用 TButton 等“类”作为通用值?

最佳答案

您使用的类型

TDictionary<string, TComponent>

表示从字符串到类的实例的映射。但是您需要从字符串到的映射。所以你需要:

TDictionary<string, TComponentClass>

哪里

TComponentClass = class of TComponent

请注意,您无需声明 TComponentClass,因为它已在 Classes 单元中声明。

关于delphi - 在 TDictionary 中使用 "class of"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15600373/

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