将C++类转换为Delphi

问题描述:

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

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函数的Delphi函数等等。所以基本上,如果进行了上面的转换,C++ Thing2 *将等于Delphi可以调用的Delphi Thing2它的方法等?

+2

您可能需要阅读鲁迪Velthuis的文章‘Delphi中使用C++对象’(http://rvelthuis.de/文章/篇-cppobjs.html)。 – 2010-12-12 17:02:20

不完全。在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; 
+0

那么,在虚拟后添加抽象将使C++中的Thing2 *等同于Delphi中的Thing2? – 2010-12-11 03:57:08

+0

@John:是的,再加上看我的编辑另一个小小的区别。 – 2010-12-11 03:58:22

+0

非常完美,非常感谢。 – 2010-12-11 04:02:02