将C ++类转换为Delphi

时间:2010-12-11 03:47:12

标签: c++ delphi translation abstract-class

我正在将一些C ++代码翻译成Delphi,并且有一些需要翻译的抽象类。这些类用作参数/返回类型等,我的问题是如果是C ++类层次结构,如:

class Thing {
    virtual void blah() = 0;
};

class Thing2 : public Thing {
    virtual bool asdf(Thing*) = 0;
};

可以在Delphi中重写为:

Thing = class
    procedure blah; virtual;
end;

Thing2 = class(Thing)
    function asdf(Thing) : Boolean; virtual;
end;

Delphi代码可以调用带有C ++ Thing *和C ++的C ++函数,而C ++代码可以调用带Delphi Things等的Delphi函数。所以基本上,如果进行上述翻译,C ++ Thing2 *会等于Delphi Thing2 Delphi可以调用它的方法等吗?

1 个答案:

答案 0 :(得分:2)

不完全。在C ++中,将方法标记为= 0意味着它是一种抽象方法。在Delphi中,为了获得相同的效果,您必须将其标记为virtual; abstract;,而不仅仅是virtual;

此外,在Delphi中,如果您在类名称下面立即放置一个类成员声明,​​它将默认声明为published,这意味着它是公共的,并且为它生成了RTTI。这可能不是您的意图,所以首先放置一个可见范围声明(private, protectedpublic):

Thing = class
public
    procedure blah; virtual; abstract;
end;

Thing2 = class(Thing)
public
    function asdf(Thing) : Boolean; virtual; abstract;
end;