来自Delphi,我习惯使用这样的类引用(元类):
type
TClass = class of TForm;
var
x: TClass;
f: TForm;
begin
x := TForm;
f := x.Create();
f.ShowModal();
f.Free;
end;
实际上,从TObject派生的每个类都有一个名为ClassType的方法,它返回一个可用于创建X实例的TClass.
在C中有类似的东西吗?
最佳答案
显然,现代Delphi支持元类与原始Smalltalk大致相同.
在C中没有类似的东西.
在C中模拟该特性的一个主要问题是,具有表示类型的值的运行时动态分配,并且能够从这些值创建实例,在C中,必须静态地知道类型的构造函数以便实例化.
也许你可以通过使用C静态多态来实现大部分相同的高级目标,包括函数重载和模板机制,而不是使用元类的极端运行时多态.
但是,使用C模拟效果的一种方法是使用可克隆的示例对象,和/或几乎相同的想法,多态对象工厂对象.前者非常不寻常,后者可以偶尔遇到(主要是差异在于参数化发生的地方:examplar-object是对象的状态,而对象工厂则是创建函数的参数).我个人会远离那个,因为C是为静态打字而设计的,这个想法是关于哄骗C模仿一种具有不同特征和编程风格的语言等.