想法很简单-将带有类名的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的类‘不兼容”。
如何使用"class of“,如TButton等作为泛型值?
发布于 2013-03-24 23:34:09
您所使用的类型
TDictionary<string, TComponent>表示从字符串到类的实例的映射。但是您需要一个从字符串到类的映射。因此,您需要:
TDictionary<string, TComponentClass>哪里
TComponentClass = class of TComponent请注意,您不需要声明TComponentClass,因为它已经在Classes单元中声明了。
https://stackoverflow.com/questions/15600373
复制相似问题