来自 Delphi,我习惯于使用类引用(元类),如下所示:
type
TClass = class of TForm;
var
x: TClass;
f: TForm;
begin
x := TForm;
f := x.Create();
f.ShowModal();
f.Free;
end;
实际上,从 TObject 派生的每个类 X 都有一个称为 ClassType 的方法,该方法返回可用于创建 X 实例的 TClass。
C++中有类似的东西吗?
C++ 中不存在元类。部分原因是因为元类需要虚拟构造函数和最派生到基的创建顺序,这是 C++ 没有的两件事,但 Delphi 有。
然而,具体在 C++Builder 中,有limited支持 Delphi 元类。 C++编译器有一个__classid() and __typeinfo()用于检索 Delphi 兼容的扩展TMetaClass*
派生自任何类的指针TObject
。该指针可以按原样传递给 Delphi 代码(您可以在 C++Builder 项目中使用 Delphi .pas 文件)。
The TApplication::CreateForm()
方法是在Delphi中实现的,并且有一个TMetaClass*
C++ 中的参数(尽管有它的名字,它实际上可以实例化任何派生自的类)TComponent
,如果你不介意的话TApplication
对象被分配为Owner
), 例如:
TForm *f;
Application->CreateForm(__classid(TForm), &f);
f->ShowModal();
delete f;
或者,如果您需要对构造函数调用进行更多控制,您可以编写自己的自定义 Delphi 代码:
unit CreateAFormUnit;
interface
uses
Classes, Forms;
function CreateAForm(AClass: TFormClass; AOwner: TComponent): TForm;
implementation
function CreateAForm(AClass: TFormClass; AOwner: TComponent): TForm;
begin
Result := AClass.Create(AOwner);
end;
end.
#include "CreateAFormUnit.hpp"
TForm *f = CreateAForm(__classid(TForm), SomeOwner);
f->ShowModal();
delete f;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)